Einzelnen Beitrag anzeigen

xaromz

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

Re: Fehlermeldung:Für diesen Befehl ist nicht genügend Speic

  Alt 5. Sep 2006, 20:46
Hallo,

verwende mal folgende Routine. Hier wird kein Bitmap verwendet, sondern direkt vom Desktop gelesen. Außerdem habe ich diesen Blödsinn mit der Umwandlung in String und wieder zurück rausgeschmissen.
Delphi-Quellcode:
procedure TForm1.ScreenToLine;
var
  Handle: THandle;
  iFor, iFor2: 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 iFor := 0 to 20 do
    begin
      bYgesBlue := 0;
      bYgesGreen := 0;
      bYgesRed := 0;

      for iFor2 := 0 to 16 do
      begin
        //jeden 64-ten Pixel in der Horizontalen addieren
        PixelColor := GetPixel(Handle, (iFor * 64), (iFor2 * 64));
        bBlue := PixelColor;
        bGreen := PixelColor shr 8;
        bRed := PixelColor shr 16;

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

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

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

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

    //Werte ausgeben
    TrackBar1.Position := bXgesRed;
    TrackBar2.Position := bXgesGreen;
    TrackBar3.Position := bXgesBlue;

    Application.ProcessMessages;
  finally
    ReleaseDC(0, Handle);
  end;
end;
Das läuft bei mir ohne die geringsten Ressourcenlecks.

Übrigens: Mit Deinen Berechnungen (jeden 64. Pixel nehmen und daraus den Durchschnitt berechnen) bekommst Du keine wirkliche Durchschnittsfarbe des Desktops, sondern nur eine sehr grobe Näherung, die auch komplett falsch sein kann. Außerdem funktioniert Deine Methode nur bei der Auflösung von 1280x1024 (20 * 64 x 16 * 64).

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