Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Arraydaten in Bitmap?? (https://www.delphipraxis.net/28690-arraydaten-bitmap.html)

erniepb 28. Aug 2004 12:13


Arraydaten in Bitmap??
 
Hallo

Gleich zur Frage: Welche Möglichkeiten gibt es die Daten aus einem Array[1..n,1..m] of record ... der unteranderem auch einen Farbwert enthält an ein Bitmap oder ähnliches zu übergeben, wobei die Array-Koordinaten gleich den Pixel-Koordinaten.

Momentan mach ich des so, wobei das ganze kontinuierlich durch ne Timerkomponente aufgerufen wird:
Code:
TCanvasPlaneCoord = record
                      Color : TColor;
                      Dist : Extended;
                      Used : Boolean
                     end;

var
 CanvasPlane : array of array of TCanvasPlaneCoord = NIL;

procedure TFormDrawingBoard.CanvasPlaneToImage(DestinationImage: TImage);
 var
  i,j : Integer;
  MyBmp : TBitmap;
 begin
  MyBmp := TBitmap.Create;
  MyBmp.Height := High(CanvasPlane[0]);
  MyBmp.Width := High(CanvasPlane);

  DestinationImage.Width := MyBmp.Width;
  DestinationImage.Height := MyBmp.Height;
  DestinationImage.Picture.Bitmap.Width := MyBmp.Width;
  DestinationImage.Picture.Bitmap.Height := MyBmp.Height;
  DestinationImage.Picture.Graphic.Width := MyBmp.Width;
  DestinationImage.Picture.Graphic.Height := MyBmp.Height;

  for i := Low(CanvasPlane) to High(CanvasPlane) do
   begin
    for j := Low(CanvasPlane[i]) to High(CanvasPlane[i]) do
     begin
      MyBmp.Canvas.Pixels[i,j] := CanvasPlane[i,j].Color;
     end;
   end;

  DestinationImage.Canvas.Draw(0,0,MyBmp);
  MyBmp.Free;                                    
 end;
Gibts hierfür noch ne Verbesserungsmöglichkeit, heißt etwas dass den Prozessor bei größeren Dimensionen nicht gleich an seine Belastungsgrenze bringt?
Danke schonmal im Vorraus.

Mfg ..

dizzy 28. Aug 2004 12:18

Re: Arraydaten in Bitmap??
 
Die Pixel-Eigenschaft ist ganz erbärmlich langsam... Eine Möglichkeit wäre das Arbeiten mit TBitmap.Scanline (gibt einige Tuts dazu), oder die Verwendung der Graphics32-Lib von www.g32.org. Die empfehle ich immer gerne, da die einfach klasse ist! :)

gruss,
dizzy

nailor 28. Aug 2004 12:42

Re: Arraydaten in Bitmap??
 
kommt drauf an. zum visualisieren von messwerten o.ä. reicht "pixels" vollkommen, zum häufigen aktualisieren (spiel, video...) ist es natürlich /=?(§"?)/(

erniepb 28. Aug 2004 16:53

Re: Arraydaten in Bitmap??
 
Hmm.. also das mit dem ScanLine verstehe ich leider noch nicht so wirklich, denn diese Funktion liest mir doch nur aus einem Bitmap eine Zeile aus oder kann man damit auch ne Zeile "setzen"??

@nailor: Naja , ich würd das ganze doch recht häufig aktualisieren, vieleicht so 10-12mal pro Sekunde wär meine Vorstellung, aber des geht momentan gar nicht... *seufz*

Danke soweit!! Auch wenns bisher noch nicht zum Erfolg geführt hat.
Mfg ..

erniepb 28. Aug 2004 18:22

Re: Arraydaten in Bitmap??
 
Nach einigem rumbasteln, hab ich es jetzt geschafft den Rechenaufwand noch ein wenig zu optimieren, indem ich die Aufrufe von:
Code:
MyBmp.Canvas.Pixels[i,j] := CanvasPlane[i,j].Color;
reduziere, da wo es nicht unbedingt notwendig ist, bringt bei einem Centrino 1,5GHz immerhin knapp 20%.
Gibt es aber vielleicht ein Möglichkeit den Grafikchipsatz diese Pixelzuweisung machen zu lassen? Ich hab irgendwo mal gelesen, dass der da wohl wesentlich schneller sein soll.

Danke!!

nailor 28. Aug 2004 18:23

Re: Arraydaten in Bitmap??
 
keine ahnung davon. aber was wie gesagt einen riesen-boost gibt ist das verwenden der scanlines.

erniepb 28. Aug 2004 19:01

Re: Arraydaten in Bitmap??
 
Also ich hab mir mal einige Beiträge zum Thema ScanLine angeguckt, aber ich konnte leider nicht wirklich herausfinden, wie ich nun den Pixeln einer Zeile ne Farbe mittels scanline zuweise. Könnte mir vielleicht jemand dazu ein Bspcode posten oder n Link zu nem Tut wo das wirklich drinsteht??

nailor 28. Aug 2004 20:19

Re: Arraydaten in Bitmap??
 
z.b. http://www.efg2.com/Lab/ImageProcess...m#Optimization oder die DP suche oder google

erniepb 31. Aug 2004 09:26

Re: Arraydaten in Bitmap??
 
@nailor: Danke des hat geholfen, auch wenn der Prozessor immer noch ein wenig "kocht".


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:28 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