| 
| 
 | Вопрос # 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
  Так долго не живут программеры . |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |