Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi BMP (nicht genügend speicher) JPG 4 MP (https://www.delphipraxis.net/75301-bmp-nicht-genuegend-speicher-jpg-4-mp.html)

Karstadt 17. Aug 2006 11:50


BMP (nicht genügend speicher) JPG 4 MP
 
Delphi-Quellcode:
    Bild := TBitmap.Create;
    f_hauptfenster.JPG_nach_BMP(BildPfad,Bild);
    //mach was
    Bild.FreeImage;
    Bild.Free;


procedure Tf_hauptfenster.JPG_nach_BMP(Pfad_Jpg:String; Var Bmp:TBitmap );
var JPG:TJpegImage;
begin
   JPG := TJPEGImage.Create;
   JPG.LoadFromFile(Pfad_Jpg);
   bmp.width:= JPG.Width;
   bmp.Height:= JPG.Height;
   bmp.canvas.StretchDraw(Rect(0,0,bmp.width,bmp.height),JPG);
   JPG.assign(bmp);
   JPG.free;
end;
wenn ich große bilder in BMP umwandele bekomme ich immer Fehler. nicht genügend speicherplatz warum?

DGL-luke 17. Aug 2006 11:53

Re: BMP (nicht genügend speicher) JPG 4 MP
 
also helfen kann cih dir da nicht, aber was soll

Delphi-Quellcode:
JPG.assign(bmp);
JPG.free;
für einen sinn haben?

Karstadt 17. Aug 2006 12:14

Re: BMP (nicht genügend speicher) JPG 4 MP
 
...
Delphi-Quellcode:
//JPG.assign(bmp);
funktioniert trotzdem nicht...

Der_Unwissende 17. Aug 2006 12:28

Re: BMP (nicht genügend speicher) JPG 4 MP
 
HI,
das kommt ein wenig darauf an was du wo laufen lässt. Erste Frage ist, was für ein Windows verwendest du? Wie groß ist das Bild (in Pixeln) und wieviel RAM hast du (wieviel freie Festplatte auf dem Laufwerk mit dem virtuellen Speicher).
Dann ist die nächste Sache, wo wird Bitmap angelegt? Ist es eine lokale Variable? Dann versuch es mal mit einer Klassenvariable.
Das var in JPG_nach_BITMAP kannst du dabei gleich streichen. Du legst keine neue Bitmap an. Da es sich bei einer Variable vom Typ TBitmap um eine Referenz handelt, werden alle Änderungen an der Bitmap automatisch übernommen.

Ansonsten solltest du auch dein Design der Klassen überarbeiten. Einerseits zeichnest du recht umständlich. Du kannst auch einfach:
Delphi-Quellcode:
procedure Jpg2Bitmap(const Jpeg : TJpegImage; const Bitmap : TBitmap);
begin
  if assigned(Jpeg) and assigned(Bitmap) then
  begin
    Jpeg.BitmapNeeded;
    Bitmap.Assign(Jpeg);
  end;
end;
Allerdings weiß ich nicht, ob du spezielle Eigenschaften der Bitmap hier erhalten möchtest, du könntest jedenfalls ziemlich schlechte Ergebnisse bei unterschiedlich Farbpaletten bekommen.

Ja, was ich eigentlich sagen wollte ist, dass du hier Logik und Darstellung vermischt. Kein Fenster braucht die Methode ein JPEG in eine Bitmap umzuwandeln direkt zu kennen. Besser wäre hier eine eigene Klasse zu Umwandlung (aber ist nur sauberes OO Design, keine Kritik!).

Gruß Der Unwissende

Karstadt 17. Aug 2006 12:33

Re: BMP (nicht genügend speicher) JPG 4 MP
 
für diesen Befehl ist nicht genügend arbeitspeicher..

Delphi-Quellcode:
    overlay.canvas.StretchDraw(Rect(0,0,overlay.Width,overlay.Height),overlay_temp);

Der_Unwissende 17. Aug 2006 12:37

Re: BMP (nicht genügend speicher) JPG 4 MP
 
Ok, grün blau blau, heute ja, draussen auch.

So, hab jetzt gezeigt dass ich auch sinnfreie Sätze hinbekomme, was willst du denn mit
Zitat:

Zitat von Karstadt
für diesen Befehl ist nicht genügend arbeitspeicher..

Delphi-Quellcode:
    overlay.canvas.StretchDraw(Rect(0,0,overlay.Width,overlay.Height),overlay_temp);

sagen?!
Gut, du bekommst irgendwo einen Fehler, und? Wo kommt das denn her?!
Wäre auch nett, wenn du erstmal die anderen (anstehenden) Fragen beantworten könntest.

Karstadt 17. Aug 2006 12:44

Re: BMP (nicht genügend speicher) JPG 4 MP
 
Sorry

Erste Frage ist, was für ein Windows verwendest du?

windows 2000 SP4 (wurde aber auch am XP PRO SP2 ausprobiert)

Wie groß ist das Bild

Bild
5000 x 3757 Pixel

Wieviel RAM hast du


Ram 512 MB

(wieviel freie Festplatte auf dem Laufwerk mit dem virtuellen Speicher).
HDD Frei 5 GB / virtuelle Speicher 768-1536

Dann ist die nächste Sache, wo wird Bitmap angelegt?
Ist es eine lokale Variable?

JA

Blackheart 17. Aug 2006 12:50

Re: BMP (nicht genügend speicher) JPG 4 MP
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var JPG:TJpegImage;
      bmp: TBitmap;
begin
   JPG := TJPEGImage.Create;
   JPG.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Bild.jpg');
   bmp := TBitmap.Create;
   bmp.width:= JPG.Width;
   bmp.Height:= JPG.Height;
   bmp.canvas.StretchDraw(Rect(0,0,bmp.width,bmp.height),JPG);
   bmp.Assign(JPG);
   bmp.SaveToFile(ChangeFileExt(ExtractFilePath(ParamStr(0)), '.bmp'));
   JPG.assign(bmp);
   bmp.free;
   JPG.free;
end;

Muetze1 17. Aug 2006 12:54

Re: BMP (nicht genügend speicher) JPG 4 MP
 
Zitat:

Zitat von Blackheart
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var JPG:TJpegImage;
      bmp: TBitmap;
begin
   JPG := TJPEGImage.Create;
   JPG.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Bild.jpg');
   bmp := TBitmap.Create;
   bmp.width:= JPG.Width;
   bmp.Height:= JPG.Height;
   bmp.canvas.StretchDraw(Rect(0,0,bmp.width,bmp.height),JPG);
   bmp.Assign(JPG);
   bmp.SaveToFile(ChangeFileExt(ExtractFilePath(ParamStr(0)), '.bmp'));
   JPG.assign(bmp);
   bmp.free;
   JPG.free;
end;

Was sollen die 2x Assign() bringen, wenn du einmal StretchDraw hast? Gibt es dafür irgendein erdenklichen Grund? Gleiches wurde schon in den Beiträgen zuvor geschrieben. Aber trotzdem einfach nochmal Code hier ohne Text reinschmeissen... Klasse! Ich empfehle erstmal die Beiträge zu lesen und auch zu beachten...

Der_Unwissende 17. Aug 2006 12:55

Re: BMP (nicht genügend speicher) JPG 4 MP
 
@Blackheart: ?????????????????????????????????????????????????? ?????????????????????????????

@karstadt
Leg mal die Bitmap als private Variable in der Klasse an. Dann solltest du das Problem los sein. Delphi hat eine Größenbeschränkung für lokale Variablen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:13 Uhr.
Seite 1 von 2  1 2      

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