Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Получение цвета пикселя из TImage (png)


Автор: Teoden 28.9.2007, 12:11
Создаю на форме объект TImage, далее загружаю в него картинку формата png.
Цитата

Image.Picture.LoadFromFile('Login.png');
ColorStr := ColorToString(Image.Picture.Bitmap.Canvas.Pixels[1,1]);

При попытке получить цвет с помощью Image.Picture.Bitmap.Canvas.Pixels[X,Y] картинка пропадает, а возвращаемый цвет получается $FFFFFF вне зависимости от X и Y.

Решение типа:
Цитата

dc:=GetDC(0);
ColorStr := ColorToString(GetPixel(dc,ClientOrigin.x+Image.Left+ X ,ClientOrigin.y+Image.Top+ Y ));
ReleaseDC(0,dc);

не подходит, так как на картинке имеются прозрачные части, а данным методом мы получаем видимый цвет на форме.

Подскажите пожалуйста решение?

Автор: Exai1e 28.9.2007, 12:15
Teoden, надо пользовать не кнопкой "цитата" а кнопкой "код", это так на будущее smile

Автор: Snowy 28.9.2007, 12:38
Это потому что битмап пустой.
Скопируй Picture в BitMap через Assign, тогда можешь работать с битмапом.

Автор: Teoden 28.9.2007, 13:08
Цитата(Snowy @ 28.9.2007,  12:38)
Это потому что битмап пустой.
Скопируй Picture в BitMap через Assign, тогда можешь работать с битмапом.

Таким образом:?
Код

   Image.Picture.LoadFromFile('Login.png');
   bm:=TBitmap.Create;
   bm.Assign(Image.Picture.Bitmap);
   ColorStr := ColorToString(bm.Canvas.Pixels[1,1]);


Не помогает. Цвет возвращается все тот же ($FFFFFF), а картинка как пропадала так и пропадает...

Автор: Snowy 28.9.2007, 13:36
Не Picture.Bitmap, а просто Picture

Автор: Teoden 28.9.2007, 13:49
Цитата(Snowy @ 28.9.2007,  13:36)
Не Picture.Bitmap, а просто Picture

В таком случае вывыливается эксепшн EConvertError с сообщением "Cannot assign a TPicture to a TBitmap"...

Автор: Snowy 28.9.2007, 13:59
Логично. Соврал.
Picture.Graphic
картинка в нём, а не в Picture.Bitmap.
Код
var bmp: TBitmap;
begin
  img1.Picture.LoadFromFile('C:\1.jpg');
  bmp := TBitmap.Create;
  bmp.Assign(img1.Picture.Graphic);
  ...
  bmp.free;

Автор: Teoden 28.9.2007, 15:14
Спасибо за помощь. Теперь все работает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)