Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - TBitmap, OutOfResources


GuaAck - Do 08.08.13 23:38
Titel: TBitmap, OutOfResources
Liebe Experten,

ich habe vor einigen Jahren ein Programm für eine sehr spezielle Fotobearbeitung gemacht, ging immer bestens mit Bildern von 7MPixel-Kameras. Jetzt habe ich erstmalig ein Foto von einer 20 MPixel-Kamera (Bitmap ist 60 MB) erhalten, und da bricht das Programm ab.

Hier der Code im Prinzip:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
TFoto = Class
{...}
save: TBitmap;
{...}
END;

TMainForm = Class(TForm)
{...}
Foto1,Foto2: TFoto;
{...}
END;

VAR
MainForm: TMainform;

PROCEDURE TMainForm.FormCreate({...});
BEGIN
Foto1:=TFoto.create;
Foto1.save:=TBitmap.Create;
Foto2:=TFoto.create;
Foto2.save:=TBitmap.Create;
END;

PROCEDURE TMainForm.Ladefoto;
BEGIN
{...}
Foto1.save.width:=5472;
Foto1.save.height:=3648;
Foto2.save.width:=5472;
Foto2.save. height:=3648{ <<<< hier gibt es den Abbruch mit OutOfResources }
{...}
END;


Mein System-Monitor zeigt, dass von meinen 1,5 GB RAM etwa 0,6 GB genutzt sind, also reichlich Reserve. Ich nutze Delphi 7 mit Windows XP. In einer anderen Anwendung habe ich ein ARRAY [1..10000] OF ... von 0,9 GB ohne Probleme nutzen können.

Habe bei Heap und Stack in der Delphi-Hilfe gestöbert auch per Google, leider nicht richtig was gefunden. Vielleicht hat ja jemand von Euch eine Idee.
Wäre schön, denn einen halbwegs handhabbaren Work-around habe ich noch nicht gefunden.

Gruß
GuaAck


IhopeonlyReader - Do 08.08.13 23:56

Danke für den vereinfachten Quelltext :D dort finde ich keine Fehler..
Hast du propertys auf den zugegriffen Variablen die benutzt werden?
Eine Funktion die sich selbst aufrufen könnte, oder oder?


Gerd Kayser - Fr 09.08.13 00:29

Setze mal PixelFormat auf pf24bit, sobald Du das Bitmap erzeugt hast.

Quelle: http://stackoverflow.com/questions/13063535/large-bitmap-on-delphi


GuaAck - Fr 09.08.13 19:03

Bingo!

Pixelformat setzen hat geholfen. Die Erklärung in der Quelle ist sehr aufschlussreich!

Gruß GuaAck