récupérer la couleur d'un pixel sur l'écran ? - Ada - Programmation
Marsh Posté le 14-08-2004 à 10:59:51
Bonjour
Adagraph est une librairie graphique pour Windows (j'ignore si elle existe sous Linux) qui permet, entre autres, de récupérer un pixel dans une fenetre créée par le programme.
Mais je ne crois pas que ce soit ce que tu cherche...
Marsh Posté le 14-08-2004 à 12:25:00
Merci pour ta réponse.
En fait, je viens de regarder dans Adagraph, mais là, mes connaissances sont un peu limitées dans le domaine.
J'ai essayé ceci :
with ada.text_io; use ada.text_io;
with adagraph; use adagraph;
procedure z2
is
couleur:integer;
function GetColorPixel (X, Y: Integer) return Integer;
pragma Import (C, GetColorPixel, "GetColorPixel" );
begin
for x in 0..200
loop
for y in 0..200
loop
couleur:=getcolorpixel (x,y);
put_line (integer'image(couleur));
end loop;
end loop;
end z2;
-> problème : affiche "-5" pour chaque point ...
J'ai vu par ailleurs, si j'ai bien compris, que l'écran en lui-même était une fenêtre et qu'on peut récupérer son contexte. Mais là, je ne vois pas comment faire avec ces éléments.
Une idée ?
Marsh Posté le 15-08-2004 à 14:03:46
Adagraph n'est sans doute pas capable de gérer un fenetre qu'il n'a pas créé lui-même. Avec
Code :
|
l'exception ADAGRAPH.CREATE_THREAD_FAILED est levée. Donc il ne gère pas l'écran...
Marsh Posté le 16-08-2004 à 13:39:39
Peut-être avec des bibliotheques comme "claw", "glut", ou "jewl" ?
Marsh Posté le 28-08-2004 à 15:46:58
J'ai trouvé ceci sur le web:
Pour capturer l'écran Windows, il suffit d'obtenir un DC (Device Context) sur le bureau, en utilisant la procédure suivante :
function GetWinBmp: TBitmap;
var
DC: HDC;
Canvas: TCanvas;
R: TRect;
begin
// Création du Bitmap
Result := TBitmap.Create;
Result.Width := Screen.Width;
Result.Height := Screen.Height;
// Récupération du DC
DC := GetDC(0);
// Affectation du Canvas
Canvas := TCanvas.Create;
Canvas.Handle := DC;
// Récupération de l'image
R := Rect(0, 0, Screen.Width, Screen.Height);
Result.Canvas.CopyRect(R, Canvas, R);
// Libération du Canvas
Canvas.Free;
// Libération du DC
ReleaseDC(0, DC);
end;
En Ada, ça donnerait quoi ?
Marsh Posté le 29-08-2004 à 17:57:57
TBitmap : c'est la VCL (Delphi). Pas utilisable en ADA.
Je pige mieux du coup sa question sur l'assembleur.
sponge bob : tu peux normalement le faire depuis ADA directement, si tu peux utiliser win32. Quand j'utilisais Aonix Object ADA c'était possible. A peu de choses près le code donné dans ton autre topic devrait marcher.
Marsh Posté le 29-08-2004 à 22:09:27
Salut à tous !
Milles excuses à ceux auxquels j'ai oublié de répondre auparavant.
J'ai trouvé ce que je cherchais.
Petit exemple :
with System;
with ada.text_io; use ada.text_io;
procedure z
is
type tableau is array (0..800,0..600) of integer;
t:tableau;
pragma Linker_Options ("-luser32 -lgdi32" );
subtype HDC is System.Address;
subtype HWND is System.Address;
my_hdc:HDC;
my_hwnd:HWND;
c:integer;
bool:boolean;
function GetDC (my_hwnd0 : HWND) return HDC;
pragma Import (Stdcall, GetDC,"GetDC" );
function GetPixel (my_hdc0:HDC;x:integer;y:integer) return integer;
pragma Import (Stdcall, GetPixel,"GetPixel" );
function setPixelv (my_hdc0:HDC;x:integer;y:integer;c:integer) return boolean;
pragma Import (Stdcall, SetPixelV,"SetPixelV" );
begin
my_hdc:=getdc (System.Null_Address);
for i in 0..800
loop
for j in 0..600
loop
c:=getpixel (my_hdc,i,j);
t(i,j):=c;
end loop;
end loop;
for i in 0..800
loop
for j in 0..600
loop
bool:=setpixelv (my_hdc,i,j,t(i,j)+200);
end loop;
end loop;
end z;
A+
Marsh Posté le 23-12-2004 à 12:08:33
Cette methode est pour recuperer un pixel HS sur un ecran
merci
Marsh Posté le 23-12-2004 à 14:11:55
Reply
Marsh Posté le 13-08-2004 à 23:00:37
Salut à tous !
Je cherche un moyen de récupérer la couleur d'un pixel sur l'écran.
Comment faire ?