Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi [Andorra 2D OGL] Image.Texture.Texture.SaveToBitmap bei geänderten Dimensionen (https://www.delphipraxis.net/179092-%5Bandorra-2d-ogl%5D-image-texture-texture-savetobitmap-bei-geaenderten-dimensionen.html)

nuclearping 13. Feb 2014 16:35

[Andorra 2D OGL] Image.Texture.Texture.SaveToBitmap bei geänderten Dimensionen
 
Hello :)

Ich habe hier ein TImageSprite. Dem wird zu Anfang ein Image mit 64x64 Größe zugewiesen. Zur Laufzeit ändert sich die Größe des Sprites je nach seinem Zustand auf 20x20 bzw. 48x48.

Wenn ich nach der Änderung der Größe auf die "Textur" des Sprites per
Delphi-Quellcode:
Image.Texture.Texture.SaveToBitmap(Bmp1);
zugreife, krachts mit einer Zugriffsverletzung beim Freigeben von Bmp1.

Delphi-Quellcode:
var
  Bmp1: TAdBitmap;
  W, H: Integer;
begin
  W := Sprite.Width; // 48
  H := Sprite.Height; // 48

  Bmp1 := TAdBitmap.Create;
  try
    Bmp1.ReserveMemory(W, H);
    Image.Texture.Texture.SaveToBitmap(Bmp1);
    // ...
  finally
    Bmp1.Free; // << Zugriffsverletzung
  end;
end;
Wenn ich das Sprite in seiner Ursprungsgröße belasse, also 64x64, läuft alles einwandfrei. Wenn ich die Größe des Sprites zur Laufzeit verkleinere (
Delphi-Quellcode:
Sprite.Width := 48;
), krachts bei Bmp1.Free, wenn vorher
Delphi-Quellcode:
Image.Texture.Texture.SaveToBitmap(Bmp1)
aufgerufen wurde. Wenn ich das Bild vergrößere (80x80 zB) bzw. die Zeile auskommentiere, funktionierts wieder.

SaveToBitmap wird in der DLL (OGLMain.pas) implementiert. Vorher ist es nur eine abstrakte virtuelle Funktion. Also lässt sich das blöd debuggen. Ich vermute aber, dass er an der Stelle wohl nicht das "geschrumpfte" Bild (48x48) in den Puffer packt, sondern das Bild mit der Originalgröße. Das zeigt sich auch daran, dass es funktioniert, wenn ich das Bild vergrößere, statt verkleinere, weil in dem Fall für Bmp1 mehr Speicher reserviert wird, als er braucht.

Ist also scheinbar ein Bug in der Andorra-OGL-Schicht.

Ist Igel überhaupt noch aktiv und wird Andorra noch gepflegt? :mrgreen:

igel457 7. Jul 2014 23:50

AW: [Andorra 2D OGL] Image.Texture.Texture.SaveToBitmap bei geänderten Dimensionen
 
Hallo,

dieser Thread ist zwar schon mehrere Monate alt und ich bin sichtlich überrascht zu sehen, dass noch irgendjemand Andorra 2D verwendet. Ich meine -- ich würde es nicht mehr verwenden. Ich war 15, 16 als ich das geschrieben habe. Kein Wunder, dass da Bugs drin sind ;-)

Leider kann ich auch nicht direkt zur Lösung des Problems beitragen, abgesehen von der Tatsache, dass ich in den Textur-Lade/Speicher Funktionen des OGL-Plugins keine Bugs sehe (gerade die Partition auf der Festplatte entstaubt und nachgeschaut). Das müsste so schon funktionieren.

Der von dir gezeigte Code weist darauf hin, das es eine Diskrepanz zwischen Sprite.Width und Sprite.Height gibt, sowie der Größe der Textur -- ich verstehe auch nicht ganz, warum das Ändern der Größe des Sprites auch die Größe der Textur ändern sollte (die ist schließlich statisch).

Die folgende Frage kann ich dagegen sicher beantworten:
Zitat:

Zitat von nuclearping (Beitrag 1247778)
Ist Igel überhaupt noch aktiv und wird Andorra noch gepflegt? :mrgreen:

Aktiv: Nein. Ich programmiere weder Delphi (dazu fehlen mir sowohl Windows als auch Delphi) noch Object Pascal. Ich bin mittlerweile eher bei low-level C/C++-Code gelandet (auch wenn ich für die Uni leider oft Sachen in Java entwickeln muss).

Wird Andorra noch gepflegt: Nein. Ich müsste mir meine eigenen Tutorials anschauen, um das überhaupt wieder auf meinem Rechner zum Laufen zu kriegen.

Viele Grüße,
Andreas

matashen 8. Jul 2014 07:03

AW: [Andorra 2D OGL] Image.Texture.Texture.SaveToBitmap bei geänderten Dimensionen
 
Zitat:

dieser Thread ist zwar schon mehrere Monate alt und ich bin sichtlich überrascht zu sehen, dass noch irgendjemand Andorra 2D verwendet. Ich meine -- ich würde es nicht mehr verwenden. Ich war 15, 16 als ich das geschrieben habe. Kein Wunder, dass da Bugs drin sind
Ich find Andorra nach wie vor nicht schlecht, und das du erst 15/16 warst spricht für dich und nicht gegen Andorra.
Viel vergleichbares an 2D gibts auch nicht.

Zitat:

Aktiv: Nein. Ich programmiere weder Delphi
Auch schade, du würdest die Szene bereichern


Zitat:

Wird Andorra noch gepflegt: Nein. Ich müsste mir meine eigenen Tutorials anschauen, um das überhaupt wieder auf meinem Rechner zum Laufen zu kriegen.
Das geht aber jedem so bei einem etwas älteren Code

Sorry das ich nichts zum Thema beitrag und den Thread störe, aber das musste ich jetzt los werden. Andorra ist besser als Andreas denkt und es würde mich freuen wenn er wieder in die Richtung was machen würde.


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