Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.11.13;
Скачать: CL | DM;

Вниз

Функция определения цвета пикселя   Найти похожие ветки 

 
alexdn ©   (2011-07-20 19:53) [0]

Подскажите плиз как описать переменную цвета, т.е. это реал, boolean? что там выдаётся..?  
 CP_Color:=GetPixel(hdc, foo.X, foo.Y);


 
Юрий Зотов ©   (2011-07-20 20:02) [1]

Вообще-то, все это есть в MSDN и даже в справке по WinAPI, идущей вместе с Delphi.

The return value is the RGB value of the pixel. If the pixel is outside of the current clipping region, the return value is CLR_INVALID.

COLORREF RGB(
 BYTE byRed,    // red component of color
 BYTE byGreen,  // green component of color
 BYTE byBlue    // blue component of color
);


 
alexdn ©   (2011-07-20 20:13) [2]

вот
procedure TForm2.FormMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
var
 foo: TPoint;
 hdc,CP_Color:BYTE; {вот тут особенно непонятно..!}
begin
 GetCursorPos(foo);
 ShowMessage("(" + IntToStr(foo.X) + " ," + IntToStr(foo.Y) + ")");
 hdc:=CreateDCA("DISPLAY",NULL,NULL,NULL);
 CP_Color:=GetPixel(hdc, {Cursor_Position.x}foo.X, {Cursor_Position.y}foo.Y);
end;

там конечно переменные как попало описаны.. и что там нужно?..


 
Юрий Зотов ©   (2011-07-20 20:29) [3]

hdc: THandle;
CP_Color: DWORD;


 
Юрий Зотов ©   (2011-07-20 20:34) [4]

По сути, обе эти переменные - беззнаковое 4-х байтововое целое.

Цвет в RGB представляется так:
$00BBGGRR,
где каждая буква R, G или B обозначает 16-ричную цифру. Поэтому здесь младший байт - уровень красного, следующий байт - уровень зеленого, следующий байт - уровень синего.


 
alexdn ©   (2011-07-20 20:37) [5]

спасибо), вот так было сделано:
 foo,p: TPoint;
 C:TCanvas;
 hP:Cardinal;
begin
C:=TCanvas.Create;
GetCursorPos(p);
C.Handle:=GetDC(0);
hP:=GetPixel(GetDC(0),p.X,p.Y);
ShowMessage("(" + ColorToString(hP) + ")");

хотя ещё подумаю, может вернусь к msdn..


 
Юрий Зотов ©   (2011-07-20 20:50) [6]

> alexdn ©   (20.07.11 20:37) [5]

1. После того, как объект TCanvas стал не нужен, его надо уничтожить, иначе будет утечка памяти.

2. Здесь этот объект вообще ни к чему, используйте сразу HDC.

3. В конце нужно вызвать ReleaseDC, иначе будет утечка ресурсов.

var
 P: TPoint;
 DC: THandle;
 Color: DWORD;
begin
 GetCursorPos(P);
 DC := GetDC(0);
 try
   Color := GetPixel(DC, P.X, P.Y);
   ...
 finally
   ReleaseDC(0, DC)
 end
end;


 
Омлет ©   (2011-07-21 08:52) [7]

> что там выдаётся..?  

TColorRef



Страницы: 1 вся ветка

Текущий архив: 2011.11.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
2-1311321505
ixen
2011-07-22 11:58
2011.11.13
Как узнать тип поля?


2-1310392304
jetus
2011-07-11 17:51
2011.11.13
MDI-приложение и перерисовка родительской формы


2-1311690897
nofical
2011-07-26 18:34
2011.11.13
Работа с ReadProcessMemory, как прочитать данные ячейки?


3-1265030110
macrodens
2010-02-01 16:15
2011.11.13
Почему вставляются пустые поля?


15-1310338080
Кто б сомневался
2011-07-11 02:48
2011.11.13
Свитч, 2 компа и реальные IP - как сделать сеть?