AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi [Andorra 2D OGL] Image.Texture.Texture.SaveToBitmap bei geänderten Dimensionen

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

Ein Thema von nuclearping · begonnen am 13. Feb 2014 · letzter Beitrag vom 8. Jul 2014
Antwort Antwort
nuclearping

Registriert seit: 7. Jun 2008
Ort: OPR
708 Beiträge
 
Delphi XE7 Professional
 
#1

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

  Alt 13. Feb 2014, 16:35
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 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 (Sprite.Width := 48; ), krachts bei Bmp1.Free, wenn vorher 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?
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#2

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

  Alt 7. Jul 2014, 23:50
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:
Ist Igel überhaupt noch aktiv und wird Andorra noch gepflegt?
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
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
437 Beiträge
 
Delphi XE2 Enterprise
 
#3

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

  Alt 8. Jul 2014, 07:03
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.
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 21:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf