![]() |
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:
Gibts hierfür noch ne Verbesserungsmöglichkeit, heißt etwas dass den Prozessor bei größeren Dimensionen nicht gleich an seine Belastungsgrenze bringt?
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; Danke schonmal im Vorraus. Mfg .. |
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
![]() gruss, dizzy |
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 /=?(§"?)/(
|
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 .. |
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:
reduziere, da wo es nicht unbedingt notwendig ist, bringt bei einem Centrino 1,5GHz immerhin knapp 20%.
MyBmp.Canvas.Pixels[i,j] := CanvasPlane[i,j].Color;
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!! |
Re: Arraydaten in Bitmap??
keine ahnung davon. aber was wie gesagt einen riesen-boost gibt ist das verwenden der scanlines.
|
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??
|
Re: Arraydaten in Bitmap??
z.b.
![]() |
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 21:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz