AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Arraydaten in Bitmap??
Thema durchsuchen
Ansicht
Themen-Optionen

Arraydaten in Bitmap??

Ein Thema von erniepb · begonnen am 28. Aug 2004 · letzter Beitrag vom 31. Aug 2004
Antwort Antwort
erniepb

Registriert seit: 8. Jun 2002
Ort: Berlin
96 Beiträge
 
Delphi 7 Enterprise
 
#1

Arraydaten in Bitmap??

  Alt 28. Aug 2004, 12:13
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 ..
  Mit Zitat antworten Zitat
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Arraydaten in Bitmap??

  Alt 28. Aug 2004, 12:18
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
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#3

Re: Arraydaten in Bitmap??

  Alt 28. Aug 2004, 12:42
kommt drauf an. zum visualisieren von messwerten o.ä. reicht "pixels" vollkommen, zum häufigen aktualisieren (spiel, video...) ist es natürlich /=?(§"?)/(
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
erniepb

Registriert seit: 8. Jun 2002
Ort: Berlin
96 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Arraydaten in Bitmap??

  Alt 28. Aug 2004, 16:53
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 ..
  Mit Zitat antworten Zitat
erniepb

Registriert seit: 8. Jun 2002
Ort: Berlin
96 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Arraydaten in Bitmap??

  Alt 28. Aug 2004, 18:22
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!!
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#6

Re: Arraydaten in Bitmap??

  Alt 28. Aug 2004, 18:23
keine ahnung davon. aber was wie gesagt einen riesen-boost gibt ist das verwenden der scanlines.
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
erniepb

Registriert seit: 8. Jun 2002
Ort: Berlin
96 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Arraydaten in Bitmap??

  Alt 28. Aug 2004, 19:01
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??
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#8

Re: Arraydaten in Bitmap??

  Alt 28. Aug 2004, 20:19
z.b. http://www.efg2.com/Lab/ImageProcess...m#Optimization oder die DP suche oder google
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
erniepb

Registriert seit: 8. Jun 2002
Ort: Berlin
96 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Arraydaten in Bitmap??

  Alt 31. Aug 2004, 09:26
@nailor: Danke des hat geholfen, auch wenn der Prozessor immer noch ein wenig "kocht".
  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 09:43 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