![]() |
Bitmap zwingt PC in die Knie
Hi,
Also was mir so noch nie passiert ist, ist folgendes: Ich habe ein Image mit einem Bitmap drin auf meinem Formular und im Button steht folgender Code:
Delphi-Quellcode:
Die Variablen i,j und row sind noch von Zeiten wo mit ihnen gearbeitet wurde. Hab entsprechende CodeTeile aber entfernt und so starte ich mein Programm, klicke auf den Button und mein PC geht sowas von in die Knie das er bestimmt (je nachdem wie man sich verhält) bis zu 5 Minuten unbedienbar ist. :shock:
procedure TForm1.Button1Click(Sender: TObject);
var i,j: Integer; row: PRGBQuad; bmp: TBitmap; tmp: TBitmap; begin bmp := Image1.Picture.Bitmap; bmp.PixelFormat := pf32Bit; tmp := TBitmap.Create; tmp.Width := bmp.Width*bmp.Height; tmp.Height := 256; tmp.PixelFormat := pf32Bit; end; Gruß Neutral General |
Re: Bitmap zwingt PC in die Knie
Hallo,
das kommt wohl auf die Größe des Ursprungsbildes an. Wenn Dein Original jewils 200 Pixel hoch und breit ist, bist Du ja schon bei 40 MB Bilddaten. Wenn Dein Originalbild etwas größer ist, wird das schnell ziemlich viel Speicher. Außerdem solltest Du immer zuserst das Pixelformat setzen, da ja ansonsten erst Speicher allokiert wird, dann erneut ein (größerer) Speicherblock für das neue Format und schließlich erfolgt eine Konvertierung. Das kostet alles Zeit. Gruß xaromz |
Re: Bitmap zwingt PC in die Knie
welche Werte hat bmp.width und bmp.height?
Zudem solltest du erst das Pixelformat setzen und danach die Größe. Ansonsten wird erst das Bitmap mit der Größe angelegt, anschließend ein neues Bitmap mit der neuen Pixelformat und der neuen Größe angelegt, das alte Bitmap in das neue kopiert und das alte Bitmap frei gegeben Wenn du erst das Pixelformat setzt wird hingegen das Pixelformat gesetzt (da Größe noch x:0 y:0 ist passiert nichts weiter) und mit setzen der Größe wird dann gleich das Bitmap in der richtigen Größe erstellt. Bei neueren Delphiversionen gibt es bei TBitmap auch die Methode SetSize um Höhe und Breite gleichzeitig zu setzen (was aber in deinem Fall keine Rolle spielt weil es egal ist das die da Höhe beim setzen der Breite noch 0 ist) |
Re: Bitmap zwingt PC in die Knie
Wie groß ist den Image? Wenn du die Width von tmb berechnest indem du Width und Height von der Image multiplizierst, dann kann das erstens ein sehr großer Wert werden und zweitens ab einer bestimmten Größe wird dauert was wirklich lange. Obwohl Height von tmb noch 0 ist, aber es wird eine große Bitmap angelegt. So sind 1024 * 768 = 786432. Und das ist für eine Bitmap verdammt groß, eventuell sogar schon zu groß. Später wird auch noch Height vergrößert. Da sind paar MB schnell da.
|
Re: Bitmap zwingt PC in die Knie
@Popov: es dürfte erst beim setzen von height, und später nochmal beim setzen des pixelformat hängen.
Denn gehen wir von folgender Größe aus: 1024 * 768 = 786432 so ist: 786432(Breite) * 0(Höhe) = 0 Und somit wird zu diesem Zeitpunkt noch kein Speicher angefordert. |
Re: Bitmap zwingt PC in die Knie
Zitat:
|
Re: Bitmap zwingt PC in die Knie
Hi,
ja es ist mir auch eben erst bewusst geworden das das je nach Bildgröße ungeahnte Außmaße annimmt .... Setzte jetzt das Pixelformat zuerst und jetzt hält sichs in Grenzen. Also große Bilder sind quasi unmöglich aber den Quelltext des Programms werde ich nichtmal speichern. Wollte nur was gucken. Von daher nicht so wichtig :wink: Danke für die Erklärungen Gruß Neutral General |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 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