Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 328

/ вопрос открыт /

Здравствуйте, эксперты!
Как получить цвет пиксела, точнее, обрабатывать полученный цвет как 3 числа ( например, сравнение цветов ) ?
Как задать цвет - я знаю ( код внизу )

Приложение:
  1. c : Tcolor ;
  2. ......
  3. c := RGB ( 13,25,36 ) ;


Яуген Таляныч Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Яуген Таляныч (статус: Посетитель)
Вопрос отправлен: 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™

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™

min@y™ (статус: Доктор наук), 12 февраля 2008, 09:18 [#3]:

Цитата:

Я включил мозги...


Ну наконец-то!!!!!!!!!!!!!!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Яуген Таляныч

Яуген Таляныч (статус: Посетитель), 13 февраля 2008, 14:39 [#4]:

>> Я включил мозги...

>Ну наконец-то!!!!!!!!!!!!!!

Не надо смеяться над чайником, который начинал еще на БЭСМ-6 на Алголе-60 :-) Так долго не живут программеры .

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:26
Выполнено за 0.02 сек.