AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

GetPixel schneller machen bzw. ersatz

Ein Thema von xZise · begonnen am 9. Sep 2006 · letzter Beitrag vom 9. Sep 2006
Antwort Antwort
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

GetPixel schneller machen bzw. ersatz

  Alt 9. Sep 2006, 15:30
Kennt ihr einen Ersatz für GetPixels oder eine möglichkeit es schneller zu machen?

So ist es bisher. Wenn der Wert "seZoom.Value" Größer als 10 ist, dann läufts noch gut (16-31 ms), aber dann wirds richtig langsam (Bei 10 max 47 ms und bei 2 haben wir 700 ms).

Diese Funktion wird durch einen Timer alle 33 ms aufgerufen:

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  StartTime, TimeDiff : Cardinal;
  Pixel : TColor;
  i, j : Byte;
begin
  if Visible then begin
    StartTime := GetTickCount;
    if OnMouse then begin
      Left := Mouse.CursorPos.X + 4;
      Top := Mouse.CursorPos.Y + 4;
    end;

    lMousePos.Caption := IntToStr(Mouse.CursorPos.X) + ' - ' + IntToStr(Mouse.CursorPos.Y);

    Pixel := GetPixel(DC, Mouse.CursorPos.X, Mouse.CursorPos.Y);

    lColor.Caption := IntToStr(GetRValue(Pixel)) + ' ' + IntToStr(GetGValue(Pixel)) + ' ' + IntToStr(GetBValue(Pixel));
    lDelphi.Caption := ColorToString(Pixel);

    iZoom.Canvas.Brush.Style := bsSolid;
    // Create Image
    for i := 0 to Round(iZoom.Width / seZoom.Value) do begin
      for j := 0 to Round(iZoom.Height / seZoom.Value) do begin
        iZoom.Canvas.Pen.Color := GetPixel(DC, Mouse.CursorPos.X + (i - 3), Mouse.CursorPos.Y + (j - 3));
        iZoom.Canvas.Brush.Color := GetPixel(DC, Mouse.CursorPos.X + (i - 3), Mouse.CursorPos.Y + (j - 3));
        iZoom.Canvas.Rectangle(i * seZoom.Value, j * seZoom.Value, (i + 1) * seZoom.Value, (j + 1) * seZoom.Value);
      end;
    end;

    iZoom.Canvas.Brush.Style := bsClear;
    iZoom.Canvas.Pen.Color := clBlack;
    iZoom.Canvas.Rectangle(Round(Round(iZoom.Width / seZoom.Value) / 2) - Round(seZoom.Value / 2), Round(Round(iZoom.Width / seZoom.Value) / 2) - Round(seZoom.Value / 2),Round(Round(iZoom.Width / seZoom.Value) / 2) - Round(seZoom.Value / 2),Round(Round(iZoom.Width / seZoom.Value) / 2) - Round(seZoom.Value / 2));

    lNeedTime.Font.Style := [];

    TimeDiff := GetTickCount - StartTime;
    if TimeDiff <= 20 then
      lNeedTime.Font.Color := clGreen
    else if (TimeDiff > 20) and (TimeDiff <= 30) then
      lNeedTime.Font.Color := clYellow
    else begin
      lNeedTime.Font.Color := clRed;
      if TimeDiff > 33 then
        lNeedTime.Font.Style := [fsBold];
    end;

    lNeedTime.Caption := IntToStr(TimeDiff) + ' ms';
  end;
end;
DC setzte ich übrigends im Create.
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: GetPixel schneller machen bzw. ersatz

  Alt 9. Sep 2006, 15:48
Warum nimmst du nicht einfach StretchBlt, um vom Quell- in den Ziel-DC zu kopieren? Das sollte wesentlich schneller sein.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#3

Re: GetPixel schneller machen bzw. ersatz

  Alt 9. Sep 2006, 17:18
Cool! Ist ja richtig schnell... danke
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  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 21:59 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