Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi TBitmap - gaaanz viele - wie gehts schneller!? (https://www.delphipraxis.net/20328-tbitmap-gaaanz-viele-wie-gehts-schneller.html)

StefanDP 16. Apr 2004 03:54


TBitmap - gaaanz viele - wie gehts schneller!?
 
Hi!

Ich bin gerade an Meinem "Snake-Clone" Projekt und habe eine Spielfläche von z.b. 25x15
jedes feld bekommt dann ein TImage (ansprechbar über imFeld[x,y])

zum erstellen des feldes
Code:
  for x := 1 to Spielfeld.Breite do
  begin
    for y := 1 to Spielfeld.Hoehe do
    begin
      imFeld[x,y] := TImage.Create(imFeld[x,y]);    // Konstruktor
      with imFeld[x,y] do
      begin
        Parent:= Form1;             //das Objekt gehört zu Form1
        ...
        case Spielfeld.Feld[x,y].Inhalt of
          0: Picture.Bitmap := bmpNichts;           // Bitmap zuweisen!
          1: Picture.Bitmap := bmpWand;
        end;
        Show;                                       // TImage anzeigen
      end;
    end;
gibt es da eine schnellere methode? z.b. die verwendung von jpges oder so?!
oder hab ich einen groben denkfehler

mfg
stefan

ach ja:
Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
  bmpWand := TBitmap.Create;
  bmpWand.LoadFromFile('wand.bmp');
...

Jörn 16. Apr 2004 04:57

Re: TBitmap - gaaanz viele - wie gehts schneller!?
 
Also jpgs würden zwar den Speicheraufwand auf der Festplatte reduzieren, aber keinen Geschwindigkeitsvorteil bringen, eher sogar nachteilig wirken. Schließlich wird intern immer noch mit einem Bitmap gearbeitet, doch muss das jpg-Bild erst in ein Bitmap konvertiert werden.
Aber mir würde ad hoc nichts einfallen, was den Vorgang beschleunigen könnte.
Obwohl ich eher dazu tendieren würde, eine einzelne Paintbox nehmen würde. Im Hintergrund zeichnet man einfach alles auf ein Bitmap und weist der Paintbox dieses bei jeder Veränderung und dem OnPaint-Ereigniss zu. Der Programmstart wäre auf jeden Fall schneller, und ich denke der Ablauf auch, obwohl da eher nicht spürbar. Hätte außerdem den Vorteil, das diese Zeichentechnik der von DirectDraw/OpenGL im orthogonalen Modus entspricht, und wenn man mal darauf umsteigen möchte, fällt dies natürlich leichter.

MfG

himitsu 16. Apr 2004 07:00

Re: TBitmap - gaaanz viele - wie gehts schneller!?
 
Du kannst auch nur ein BitMap verwenden und dann die vielen kleinen BitMap's dort reinzeichnen...
schau z.B. mal in den Schachthread, da ist auch jemand mit dieser Frage der Darstellungsart beschäftigt ist.

Delphi-Quellcode:
// z.B. wenn die kleinen BitMap's eine Größe von 20x20 Pixel haben.
for x := 1 to Spielfeld.Breite do
  for y := 1 to Spielfeld.Hoehe do
    case Spielfeld.Feld[x,y].Inhalt of
      0: Image1.Canvas.Draw(X * 20, Y * 20, bmpNichts);
      1: Image1.Canvas.Draw(X * 20, Y * 20, bmpWand);
    end;
[EDIT]
Delphi-Tags vergessen :oops:

Jörn 16. Apr 2004 07:25

Re: TBitmap - gaaanz viele - wie gehts schneller!?
 
Hab ich nicht schon so was ausgedrückt oder schiele ich? Sollte ich doch langsam ins Bett?!?

himitsu 16. Apr 2004 07:39

Re: TBitmap - gaaanz viele - wie gehts schneller!?
 
Wo ich das jetzt nochmal lese ... auch endlich mal schlafen sollte -.-

StefanDP 16. Apr 2004 10:57

Re: TBitmap - gaaanz viele - wie gehts schneller!?
 
PaintBox klappt perfekt!
Thx @ all

himitsu 16. Apr 2004 11:00

Re: TBitmap - gaaanz viele - wie gehts schneller!?
 
Vergiss aber nicht, das die PaintBox das Bild nicht speichert, wenn also mal ein Teil von dem darauf befindlichen Bild übermalt wird, dann ist es auch weg und dü müßtest das Bild, oder zumindestens den Bildteil neu zeichnen.

Luckie 16. Apr 2004 11:01

Re: TBitmap - gaaanz viele - wie gehts schneller!?
 
Zu dem Problem, sieh hier: http://www.luckie-online.de/Ablage/D...eenBitmap.html

himitsu 16. Apr 2004 11:06

Re: TBitmap - gaaanz viele - wie gehts schneller!?
 
[OT]
Zitat:

Code:
{ Hintergrundfarbe [color=red]ú[/color]nd Stif[color=red]t d[/color]icke }

Delphi-Quellcode:
{ Hintergrundfarbe und Stiftdicke }
:roll:

StefanDP 16. Apr 2004 12:23

Re: TBitmap - gaaanz viele - wie gehts schneller!?
 
Zitat:

Zitat von Luckie

ich lasse im falle von paintbox.onpaint einfach die grafik komplett neu zeichnen

mfg
stefan

aber danke für den tipp


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 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 by Thomas Breitkreuz