![]() |
BMP (nicht genügend speicher) JPG 4 MP
Delphi-Quellcode:
wenn ich große bilder in BMP umwandele bekomme ich immer Fehler. nicht genügend speicherplatz warum?
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; |
Re: BMP (nicht genügend speicher) JPG 4 MP
also helfen kann cih dir da nicht, aber was soll
Delphi-Quellcode:
für einen sinn haben?
JPG.assign(bmp);
JPG.free; |
Re: BMP (nicht genügend speicher) JPG 4 MP
...
Delphi-Quellcode:
funktioniert trotzdem nicht...
//JPG.assign(bmp);
|
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:
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.
procedure Jpg2Bitmap(const Jpeg : TJpegImage; const Bitmap : TBitmap);
begin if assigned(Jpeg) and assigned(Bitmap) then begin Jpeg.BitmapNeeded; Bitmap.Assign(Jpeg); end; end; 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 |
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);
|
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:
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. |
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 |
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; |
Re: BMP (nicht genügend speicher) JPG 4 MP
Zitat:
|
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. |
Re: BMP (nicht genügend speicher) JPG 4 MP
Zitat:
|
Re: BMP (nicht genügend speicher) JPG 4 MP
Zitat:
funktioniert nicht... :( |
Re: BMP (nicht genügend speicher) JPG 4 MP
warum eigentlich stretchdraw?
Delphi-Quellcode:
EDIT: Vervollständigt... wer will, kanns gerne für die codelib vorschlagen :gruebel:
//initialization
uses jpeg; function JPGToBMP(jpgImg: TJPEGImage): TBitmap; overload; function JPGToBMP(jpgFile: string): TBitMap; overload; //implementation function JPGToBMP(jpgImg: TJPEGImage): TBitmap; begin Result := TBitmap.Create; with Result do begin Width := jpgImg.Width; Height := jpgImg.height; Canvas.Draw(0,0,jpgImg); end; end; function JPGToBMP(jpgFile: string): TBitMap; var jpgImg: TJPEGImage; begin jpgImg := TJPEGImage.Create; jpgImg.LoadFromFile(jpgFile); Result := JPGToBMP(jpgImg); //nur zur sicherheit jpgImg.Free; end; |
Re: BMP (nicht genügend speicher) JPG 4 MP
..hallo. DGL-luke
Probiere ich aus. Vielen dank! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:35 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-2025 by Thomas Breitkreuz