|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Получить цвет отдельного пикселя
Здравствуйте, знатоки своего дела!
Так вот, значит, вопрос: Подскажите пожалуйста, как мне получить корректные координаты пикселя из 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 |