if opendialog1.Execute then begin
Image2.Picture.Graphic:=nil;
Image2.Picture.LoadFromFile(opendialog1.FileName);
if Image2.Picture.Graphic is TJPEGImage then
begin
TJPEGImage(Image2.Picture.Graphic).Scale:=TJPEGScale(0);
TJPEGImage(Image2.Picture.Graphic).Performance:=jpBestSpeed;
end;
end;
Получения цвета пикселей
вот есть код(загружаю картинку в image):
Код:
а патом пытаюсь получить цвет:
Код:
var x:TColor;
...
x:=image1.Picture.Bitmap.Canvas.Pixels[10,20];
panel1.Color:=x;
...
x:=image1.Picture.Bitmap.Canvas.Pixels[10,20];
panel1.Color:=x;
но вместо цвета который нужен почемуто всегда получаем черный цвет...
плюс еще наблюдается странный глюк - после нажатию на кнопку с анным кодом картинка в image1 пропадает...
и палучить надо не в формате TColor а так что б потом с полученым цветом можно было работать, ну это наверное имеется ввиду RGB формат цвета.
x:= image1.Canvas.Pixels[10,20];
TColor to RGB
Код:
function GetRGB(Color: TColor): string;
begin
result := IntToHex(GetRValue(ColorToRGB(Color)), 2) +
IntToHex(GetGValue(ColorToRGB(Color)), 2) +
IntToHex(GetBValue(ColorToRGB(Color)), 2);
end;
begin
result := IntToHex(GetRValue(ColorToRGB(Color)), 2) +
IntToHex(GetGValue(ColorToRGB(Color)), 2) +
IntToHex(GetBValue(ColorToRGB(Color)), 2);
end;
Код:
x:= image1.Canvas.Pixels[10,20];
на код выше пишет следующее: can only modify an image if it contains a bitmap.
может еще какнибудь можно?
Image1.Picture.Bitmap.Canvas.Pixels[10,20]; - это самый логичный метод. Но он не работает. Когда дело доходит до Windows.GetPixel, оказывается, что цвет пикселя берётся с DC с нулевым хэндлом. В некоторый момент времени появляется Canvas, у которого все параметры неверные. Поэтому, наверное, цвет пикселя лучше сразу брать с помощью Win API функции GetPixel.