Показать сообщение отдельно
  #1  
Старый 02.10.2006, 13:12
Аватар для 4kusNick
4kusNick 4kusNick вне форума
Местный
 
Регистрация: 06.09.2006
Адрес: Россия, Санкт-Петербург
Сообщения: 444
Репутация: 550
Печаль Получить цвет отдельного пикселя

Здравствуйте, знатоки своего дела!
Так вот, значит, вопрос:
Подскажите пожалуйста, как мне получить корректные координаты пикселя из TBitmap, загруженной в TImage.

Я это делаю так:

Код:
function GetPixelColor(Canvas: TCanvas; X,Y: Integer): String;
var
  Color:      TColor;
  Color2:     LongInt;
  sColorWeb,
  sColorRGB:  String;
  r,g,b:      Byte;
begin

  Color := Canvas.Pixels[X,Y];
  sColorWeb := 'WEB: ' + ColorToString(Color);
  Color2 := ColorToRGB(Color);
  r := GetRValue(Color);
  g := GetGValue(Color);
  b := GetBValue(Color);
  sColorRGB := 'RGB: (' + IntToStr(r) + ','
                        + IntToStr(g) + ','
                        + IntToStr(b) + ')';

  Result := sColorWeb + #10#13 + sColorRGB;

end;

procedure TMainForm.InImageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
//...
Label1.Caption := GetPixelColor(InImage.Canvas,X,Y);
//...
end;

InImage - обычный компонент TImage, расположенный на форме
В него загружаеся какая-то картинка, причем, размеры картинки, допустим, 100 на 100 пикс., а размеры компонента - 200 на 200. Так вот, после загрузки картинки, она вписиывается в компонент с соблюдением пропорций (Stretch := True; Proportional := True);

В итоге, визуально мы видим правильно вписанную картинку, но когда пытаемся получить цвет пикселя с канвы TImage или c канвы TImage.Picture.Bitmap, все координаты получаются неверными, т.е. фактически X и Y, например = 50, а цвет, возвращаемый функцией Canvas.Pixels[X,Y] соответствует цвету пикселя, расположенного выше и левеетого, на который мы навели мышь.
Я немного покопался и понял, что в канве находится как бы картинка не растянутая, а та, которую мы загружали (визуально она растянулас на компоненте мы ее видим растянутой,а на самом деле она все еще прежних размеров и Canvas той же шириныи высоты,что и картинка, а не той, что Компонент TImage).
Наверное, всеэто звучит запутанно, если чего не совсем понятно- пишите, я уточню...
Надеюсь, кто-нибудь уже сталкивался с подобным.
Спасибо.
__________________
THE CRACKER IS OUT THERE
Ответить с цитированием