AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi GetPixel unter Vista
Thema durchsuchen
Ansicht
Themen-Optionen

GetPixel unter Vista

Ein Thema von meg91 · begonnen am 7. Aug 2007 · letzter Beitrag vom 15. Aug 2007
Antwort Antwort
Benutzerbild von meg91
meg91

Registriert seit: 25. Apr 2006
131 Beiträge
 
Turbo Delphi für Win32
 
#1

GetPixel unter Vista

  Alt 7. Aug 2007, 22:38
Hi@all
ich hatte mal vor längerer Zeit eine Funktion geschrieben, die über GetPixel die Durchschnittsfarbe einer ausgewählten Fläche am Bildschirm errechnet. Dazu habe ich einfach die Farben einiger Pixels geholt, alle zusammengezählt und dann wieder durch die Pixelanzahl geteilt, eigentlich ziemlich simpel.
Auf 2000 und XP hat das alles super funktioniert, nur unter Vista will das ganze nicht so recht
Sobald ich versuche die Pixels zu "scannen" reagiert das Programm nicht mehr

gibt es unter Vista dafür einen eigenen Befehl?
was läuft da falsch?

Gruß
Markus
  Mit Zitat antworten Zitat
Flare

Registriert seit: 26. Jan 2006
Ort: Leipzig
529 Beiträge
 
Delphi 7 Professional
 
#2

Re: GetPixel unter Vista

  Alt 8. Aug 2007, 00:14
Du könntest uns deinen bisher verwendeten Code mal zeigen. Das würde die Sache auf jeden Fall leichter machen.


Flare
Willy Scheibel
  Mit Zitat antworten Zitat
Benutzerbild von meg91
meg91

Registriert seit: 25. Apr 2006
131 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: GetPixel unter Vista

  Alt 8. Aug 2007, 01:01
so sieht meine Prozedur aus
Delphi-Quellcode:
procedure AreaToPix;
var
  Handle: THandle;
  yFor, xFor: Integer;
  bRed, bGreen, bBlue: Byte;
  PixelColor: Integer;
  bXgesRed, bXgesGreen, bXgesBlue: Integer; //Duchschnittsfarben Horizontal
  bYgesRed, bYgesGreen, bYgesBlue: Integer; //Duchschnittsfarben Vertikal
begin
  Handle := GetDC(0);
  try
    bXgesBlue := 0;
    bXgesGreen := 0;
    bXgesRed := 0;

    for yFor := 1 to 9 do
    begin
      bYgesBlue := 0;
      bYgesGreen := 0;
      bYgesRed := 0;

      for xFor := 1 to 7 do
      begin
        PixelColor := GetPixel(Handle, round(yFor * ((x2-x1)/9)) + x1, round(xFor * ((y2-y1)/7)) + y1);
        bBlue := PixelColor;
        bGreen := PixelColor shr 8;
        bRed := PixelColor shr 16;

        bYgesBlue := bYgesBlue + bBlue;
        bYgesGreen := bYgesGreen + bGreen;
        bYgesRed := bYgesRed + bRed;
      end;

      bYgesBlue := Round(bYgesBlue / 7);
      bYgesGreen := Round(bYgesGreen / 7);
      bYgesRed := Round(bYgesRed / 7);

      bXgesBlue := bXgesBlue + bYgesBlue;
      bXgesGreen := bXgesGreen + bYgesGreen;
      bXgesRed := bXgesRed + bYgesRed;
    end;

    bXgesBlue := Round(bXgesBlue / 9);
    bXgesGreen := Round(bXgesGreen / 9);
    bXgesRed := Round(bXgesRed / 9);

    //Werte ausgeben
    u_usbpwm.Form1.changeLEDs(bXgesRed, bXgesGreen, bXgesBlue);
  finally
    ReleaseDC(0, Handle);
  end;
end;
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#4

Re: GetPixel unter Vista

  Alt 8. Aug 2007, 10:01
Hallo,

bei mir funktioniert diese Routine genau so, wie sie soll. Das Problem ist aber, dass Du auf den DC des Desktops zugreifst. Das sollte man unter Vista vermeiden, da es sehr lang dauert.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#5

Re: GetPixel unter Vista

  Alt 8. Aug 2007, 13:59
von VNC weiß ich, dass man den Desktop (oder den gewünschten Bereich) erstmal in ein Speicherbitmap kopieren sollte, um ihn dann weiter analysieren zu können.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von meg91
meg91

Registriert seit: 25. Apr 2006
131 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: GetPixel unter Vista

  Alt 8. Aug 2007, 17:54
bin ich noch gar nicht drauf gekommen,
aber bracht es nicht ein haufen Speicher wenn ich den ganzen Desktop "zwischenspeichere"
außerdem soll diese Prozdur ca 100-250 mal pro Sekunde durchlaufen
wird das ganze dann nicht viel zu langsam?
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#7

Re: GetPixel unter Vista

  Alt 8. Aug 2007, 18:19
Zitat von meg91:
bin ich noch gar nicht drauf gekommen,
aber bracht es nicht ein haufen Speicher wenn ich den ganzen Desktop "zwischenspeichere"
außerdem soll diese Prozdur ca 100-250 mal pro Sekunde durchlaufen
wird das ganze dann nicht viel zu langsam?
Natürlich belastet das den PC. Das musst du auch ausprobieren. Aber soviel wird es auf heutigen Rechnern nicht sein. VNC macht es ja auch so (nur optimiert).
Der Speicher von 1600x1200 bleibt unterhalb von 10mb.

Am schnellsten würde es funktionieren, wenn du wie UltraVNC einen Hook verwendest, der nur die Änderungen auf dem Bildschirm dir mitteilt.
Schau dir doch die Quellen von UltraVNC mal an.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von meg91
meg91

Registriert seit: 25. Apr 2006
131 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: GetPixel unter Vista

  Alt 8. Aug 2007, 22:56
ich habe mir die ganzen Sachen angeschaut, aber ganz ehrlich ich blick da nicht durch
zu der Sache mit dem Bitmap:
da gibt es schon einige Routinen, welche aber alle den DC verwenden und somit wohl auch nicht schneller sein werden

mir ist jetzt auch aufgefallen, dass die DC Geschichte auf Vista nur schrecklich langsam ist, wenn man nämlich 100 Anfragen pro Sek sendet, siehts eben so aus, als ob gar nix mehr ginge

das mit der Systemauslastung ist mir schon bewusst. Ich hatte auf meinem alten PC (AMD 2,6GHz_WinXP) eine CPU-Auslastung von ca 45% bei 250 Anfragen/s, da dachte ich eigentlich dass es auf nem Intel 2,2 Core2Duo (aber mit Vista) doch etwas schneller geht und nicht langsamer

vllt könntet ihr mal ein CodeSchnipsel posten, mit einer Alternative zu DC, oder die Hook Sache fände ich auch spannend, wobei ich eigentlich für meine Zwecke keinen Nutzen darin sehe nur die Veränderten Bereiche auszulesen, da ich für die Druchschnittsfarbe doch alle brauche
  Mit Zitat antworten Zitat
Benutzerbild von meg91
meg91

Registriert seit: 25. Apr 2006
131 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: GetPixel unter Vista

  Alt 15. Aug 2007, 10:46
hab niemand ne Idee wie das unter Vista läuft ?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz