|
Вопрос # 1 328/ вопрос открыт / |
|
Здравствуйте, эксперты!
Как получить цвет пиксела, точнее, обрабатывать полученный цвет как 3 числа ( например, сравнение цветов ) ?
Как задать цвет - я знаю ( код внизу )
 |
Вопрос задал: Яуген Таляныч (статус: Посетитель)
Вопрос отправлен: 11 февраля 2008, 03:08
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: min@y™
Достаточно почитать Delphi help:
Цитата:
If you specify TColor as a specific 4-byte hexadecimal number instead of using the constants defined in the Graphics unit, the low three bytes represent RGB color intensities for blue, green, and red, respectively. The value $00FF0000 (Delphi) or 0x00FF0000 (C++) represents full-intensity, pure blue, $0000FF00 (Delphi) or 0x0000FF00 (C++) is pure green, and $000000FF (Delphi) or 0x000000FF (C++) is pure red. $00000000 (Delphi) or 0x00000000 (C++) is black and $00FFFFFF (Delphi) or 0x00FFFFFF (C++) is white.
Итак цвета (без учёта альфа-канала):
- $00FF0000 - синий;
- $0000FF00 - зелёный;
- $000000FF - красный;
- $00000000 - чёрный;
- $00FFFFFF - белый.
var
C: TColor;
R, G, B: Byte;
begin
R:= C and $000000FF; // красный
G:= (C and $0000FF00) shr 8; // зелёный
B:= (C and $00FF0000) shr 16; // синий
end;
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 11 февраля 2008, 08:43
Оценка за ответ: 3
Комментарий к оценке: Я, наверное, нечетко сформулировал вопрос, ибо получил ответ не на него. Как задать цвет - это я знаю. А вот такая задача : есть Image, вожу по ней курсором, и находящийся под ним пиксель считывается, и составляющие его цвета распечатываются в виде чисел в трех окошках Edit.
|
Мини-форум вопроса
Всего сообщений: 4; последнее сообщение — 13 февраля 2008, 14:39; участников в обсуждении: 2.
|
min@y™ (статус: Доктор наук), 11 февраля 2008, 15:54 [#1]:
Ну тогда типа так (написал тебе тестовый проект):
procedure TMainForm.ImageMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
Pixel: TColor;
R, G, B: Byte;
begin
MousePanel.Caption:= 'Мышь: ' + IntToStr(X) + ', ' + IntToStr(Y);
Pixel:= Image.Picture.Bitmap.Canvas.Pixels[X, Y];
MouseShape.Brush.Color:= Pixel;
R:= GetRValue(Pixel);
G:= GetGValue(Pixel);
B:= GetBValue(Pixel);
RedPanel.Caption:= 'Красный: ' + IntToStr(R) + ' = 0x' + IntToHex(R, 2);
GreenPanel.Caption:= 'Зелёный: ' + IntToStr(G) + ' = 0x' + IntToHex(G, 2);
BluePanel.Caption:= 'Синий: ' + IntToStr(B) + ' = 0x' + IntToHex(B, 2);
end;
Весь проект могу выслать на мыло или по асе.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Яуген Таляныч (статус: Посетитель), 12 февраля 2008, 08:55 [#2]:
Пасиба ! Я включил мозги и получил приблизительно такой результат ( из клипборда загружается картинка, а потом по ней елозю ) :
...........................................................
public
R,G,B : byte ;
IX,IY : integer ;
C: TColor;
I : longint ;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Image1.Picture.Bitmap.Assign(Clipboard);
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
IX := X ; IY := Y ; C := Image1.Canvas.Pixels [IX,IY] ;
I := C and $00FFFFFF ;
R := I and $000000FF ; I := I div 256 ;
G := I and $000000FF ; I := I div 256 ;
B := I and $000000FF ;
Ed.Text := IntToStr(R) + ' ' + IntToStr(G)+ ' ' + IntToStr(B) +
' / ' + IntToStr(IX)+ ' ' + IntToStr(IY) ;
end;
Конечно, тут, видимо, много лишнего, но работает. Как для чайника, сойдет.
|
|
min@y™ (статус: Доктор наук), 12 февраля 2008, 09:18 [#3]:
Цитата:
Я включил мозги...
Ну наконец-то!!!!!!!!!!!!!!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Яуген Таляныч (статус: Посетитель), 13 февраля 2008, 14:39 [#4]:
>> Я включил мозги...
>Ну наконец-то!!!!!!!!!!!!!!
Не надо смеяться над чайником, который начинал еще на БЭСМ-6 на Алголе-60 Так долго не живут программеры .
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|