AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bitmap zwingt PC in die Knie
Thema durchsuchen
Ansicht
Themen-Optionen

Bitmap zwingt PC in die Knie

Ein Thema von Neutral General · begonnen am 29. Nov 2007 · letzter Beitrag vom 29. Nov 2007
Antwort Antwort
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Bitmap zwingt PC in die Knie

  Alt 29. Nov 2007, 13:10
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:
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;
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.

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#2

Re: Bitmap zwingt PC in die Knie

  Alt 29. Nov 2007, 13:16
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
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Bitmap zwingt PC in die Knie

  Alt 29. Nov 2007, 13:18
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)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#4

Re: Bitmap zwingt PC in die Knie

  Alt 29. Nov 2007, 13:26
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.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Bitmap zwingt PC in die Knie

  Alt 29. Nov 2007, 13:33
@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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#6

Re: Bitmap zwingt PC in die Knie

  Alt 29. Nov 2007, 13:52
Zitat von SirThornberry:
@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.
Das bezog sich nicht unbedingt auf die Höhe 0 sondern war allgemein zu verstehen. Und zweitens bezog sich die große Bitmap auf die eventuelle Breite von 786432. Auch bei Height 0 ist das schon eine große Bitmap. Heght 0 hin oder her, 3/4 Million Pixel Breite ist groß.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

Re: Bitmap zwingt PC in die Knie

  Alt 29. Nov 2007, 14:30
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

Danke für die Erklärungen

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Antwort Antwort


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 15:37 Uhr.
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