begin process at 2008 05 16 04:27:50
1 173 209 membres
51 nouveaux aujourd'hui
13 970 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Couleur Pixel écran [ Système / Périphérique ] (cedricbi)

Couleur Pixel écran le 07/10/2007 17:09:52

cedricbi
Bonjour,
Je cherche une fonction permettant de récuperer la couleur d'un pixel de l'écran.
Il y a la fonction GetPixel mais, elle est trop lente pour ce que je veux en faire...
En fait, je voudrais une fonction un peu comme ScanLine pour un bitmap.
Cela existe-t-il ? Si non, comment faire pour accéder très rapidement à la valeur d'un pixel n'importe où sur l'écran?

Merci


Le plus dur dans un programme c'est de savoir pourquoi il marche !

/FONT>


Re : Couleur Pixel écran le 07/10/2007 20:52:04

japee
Membre Club
(Admin CS)
Salut,

Bigre...

GetPixel faisant appel à l'api Windows (gdi32.dll), je vois pas comment faire plus rapide.

Mais c'est peut-être la routine dans laquelle tu l'utilises qui ralentit ?

Re : Couleur Pixel écran le 07/10/2007 21:37:30

cedricbi
Salut,

Non, ma routine ne ralentissait pas, mais je doit quand même analyser tout l'écran (plus d'un millions de pixel soit plus de 4 Mo de mémoire plusieurs fois par seconde... ). Mais j'ai trouvé un moyen (auquel j'aurais pu penser avant)...
Il suffit d'utiliser un BitBlt pour copier le Handle écran vers le Canvas d'un TBitmap puis je fais un Scanline à ma sauce ce que me fait au final 7 lignes en assembleur pour analyser tout l'écran.

Mais maintenant c'est la fonction BitBlt qui me ralentit encore un peu trop! N'existe-t-il pas une autre fonction un peu plus rapide (je suppose que StretchBlt est plus lente) ?

Merci


Le plus dur dans un programme c'est de savoir pourquoi il marche !

/FONT>


Re : Couleur Pixel écran le 08/10/2007 12:49:31

rt15
Membre Club
Salut,

BitBlt est réputée la plus rapide (Même si elle reste bien lente...). Faudrait savoir ce qu'utilise les logiciels de capture qui crashent des vidos en sortie.

Tu peux éventuellement jeter un coup d'oeil sur l'obsolète DirectDraw, nottamment cette classe. 



Re : Couleur Pixel écran le 08/10/2007 13:00:41

rt15
Membre Club
Ce lien à l'air pas mal sur le sujet des différentes méthodes de captures :
http://www.codeproject.com/dialog/screencap.asp

Re : Couleur Pixel écran le 08/10/2007 16:29:25

f0xi
Membre Club
(Admin CS)
Réponse acceptée !


j'avais fait un truc similaire dans un prog, du bricolage mais bon ... c'est rapide :


uses ClipBrd;

function ColorRefToColor(const C : integer): integer;
begin
  result := (C and $0000FF00) or
            ((C and $000000FF) shl 16) or
            ((C and $00FF0000) shr 16);
end;

function PushAsyncKey(const K : byte) : boolean;
begin
  keybd_event(K, 0, KEYEVENTF_EXTENDEDKEY, 0);
  keybd_event(K, 0, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
  result := true;
end;

type
  pScanLine = ^TScanLine;
  TScanLine = array[0..4096] of integer;

var Bmp : TBitmap;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Bmp := TBitmap.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Bmp.free;
end;


procedure TForm1.Timer1Timer(Sender: TObject);
var MP : TPoint;
    N  : integer;
    pScan : pScanLine;
begin
  GetCursorPos(MP);

  ClipBoard.Open;
  try
    PushAsyncKey(windows.VK_SNAPSHOT);
    with TBitmap.Create do
    try
      if ClipBoard.HasFormat(CF_BITMAP) then
      begin
        LoadFromClipboardFormat(CF_BITMAP, ClipBoard.GetAsHandle(CF_BITMAP), 0);

        if MP.X < 0 then
           MP.X := 0
        else
        if MP.X >= Width then
           MP.X := Width-1;

        if MP.Y < 0 then
           MP.Y := 0
        else
        if MP.Y >= Height then
           MP.Y := Height-1;

        pScan := ScanLine[MP.Y];
        Self.Color := ColorRefToColor(pScan[MP.X]);
      end;
    finally
      Free;
    end;
  finally
    ClipBoard.Clear;
    ClipBoard.Close;
  end;
end;




deefsign.gif

Re : Couleur Pixel écran le 08/10/2007 18:54:50

cedricbi
lol
effectivement... du gros bricolage...
mais je pense que c'est l'une des meilleurs solutions et des plus rapides! Comme quoi chez Microsoft on se pose pas trop de questions pour ameillorer la vie du programmeur.


Le plus dur dans un programme c'est de savoir pourquoi il marche !

/FONT>



Classé sous : fonction, couleur, écran, pixel

Participer à cet échange

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS