Witam!
Potrzebuje wydobyć wartosc RGB z konkretnego piksela ekranu, ale zupelnie nie wiem jak to zrobic.
Bylbym wdzieczny za wskazowki.
Pozdrawiam
0
0
Szukaj! Było niedawno.
0
Tak to było w starym dobrym pascalu...
FUNCTION GetPixel(Buf :Pointer; X, Y :Word) :Byte; ASSEMBLER;
ASM
LES DI, Buf
MOV AX, [Y]
MOV DI, AX
SHL AX, 8
SHL DI, 6
ADD DI, AX
ADD DI, [X]
MOV AL, BYTE PTR ES:[DI]
END; { GetPixel }
A rozbicie na RGB
PROCEDURE GetColor(Kolor :Byte; VAR AColorRec :TColorRec); ASSEMBLER;
ASM
MOV DX, 3C7h
MOV AL, [Kolor] { Port[$3C7] := Kolor }
OUT DX, AL
MOV DX, 3C9h
LES DI, AColorRec { ES = segment, DI = offset }
IN AL, DX
MOV BYTE PTR ES:[DI+0], AL { AColorRec.R := Port[$3C9] }
IN AL, DX
MOV BYTE PTR ES:[DI+1], AL { AColorRec.G := Port[$3C9] }
IN AL, DX
MOV BYTE PTR ES:[DI+2], AL { AColorRec.B := Port[$3C9] }
END; { GetColor }
0
var C:TCanvas;
begin
C:=TCanvas.Create;
C.Handle:=GetWindowDC(GetDesktopWindow);
Color:=C.Pixels[x,y];
C.Free;
end;
a skladowe wyciaga sie tak:
R:=GetRValue(color);
G:=GetGValue(color);
B:=GetBValue(color);