Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi TBitmap bleibt leer (https://www.delphipraxis.net/72947-tbitmap-bleibt-leer.html)

Hazardos 9. Jul 2006 22:32


TBitmap bleibt leer
 
Hallo, ich habe folgenden Quelltext:

Delphi-Quellcode:
var bmp : TBitmap;
    x,y : integer;
    p : pbytearray;
begin
bmp := TBitmap.Create;
bmp.LoadFromFile('C:\test.bmp');
bmp.width := 100;
bmp.height := 100;

for y := 0 to bmp.Height - 1
  do
    begin
      p := bmp.ScanLine[y];
      for x := 0 to bmp.Width*3 - 1
        do p[x] := Random (255);
    end;
Image1.Picture.Assign(bmp);
end;
das Problem ist, dass das Resultat ausbleibt wenn ich die Zeile
<bmp.LoadFromFile('C:\test.bmp');>
entferne. Ich könnte jetzt sicherlich mogeln um das Problem zu umgehen, aber dadurch werde ich ja nicht schlauer... Wär super wenn einer von euch mir weiterhelfen könnte (Ursache, Lösung)...
MfG Jörn

Hawkeye219 9. Jul 2006 22:39

Re: TBitmap bleibt leer
 
Hallo Jörn,

woher soll das TBitmap-Objekt die Größe kennen, wenn du sie nicht vorgibst?

Delphi-Quellcode:
bmp := TBitmap.Create;
bmp.Width := gewuenschte_Breite;
bmp.Height := gewuenschte_Hoehe;
Gruß Hawkeye

Hazardos 9. Jul 2006 22:46

Re: TBitmap bleibt leer
 
Stimmt, das hab ich hier vergessen...
Der gepostete Quelltext ist nur eine Vereinfachung des Originals, welches die Größenzuweisung natürlich enthält.

Hawkeye219 9. Jul 2006 22:55

Re: TBitmap bleibt leer
 
Du solltest auch das richtige Pixel-Format setzen:

Delphi-Quellcode:
bmp := TBitmap.Create;
bmp.Width := 100;
bmp.Height := 100;
bmp.PixelFormat := pf24Bit; // <<--- hier
Gruß Hawkeye

Hazardos 10. Jul 2006 14:47

Re: TBitmap bleibt leer
 
Ne, das hat auch nichts gebracht... Ich denke, dass der Pointer von Scanline nicht zugewiesen werden kann, da die bitmap ja noch leer ist. Vielleicht müsste man sie erst irgendwie initialisieren.... aber wie?

SirThornberry 10. Jul 2006 14:52

Re: TBitmap bleibt leer
 
Das Bitmap ist nicht leer. Das Bitmap ist einfach nur einfarbig, aber nicht leer.
@Hazardos. Was soll denn das Resultat sein?
Und warum lässt du die x-Schleife bis zu einer Breite * 3 durchlaufen? Willst du anderen Speicher überschreiben oder hab ich da was übersehen? Ah, ich seh warum. Du verwendest ein ByteArray anstelle eines TRGBTribleArrays

bei mir funktioniert es übrigens wenn ich nach dem setzen der Bildgröße folgendes einfüge:
Delphi-Quellcode:
  bmp.PixelFormat := pf24bit;
zuvor ist das PixelFormat = pfDevice und somit ist es nicht möglich mit scanline darauf zu zugreifen (siehe hilfe)

Hazardos 10. Jul 2006 21:43

Re: TBitmap bleibt leer
 
Okay, ich hatte einen kleinen Flüchtigkeitsfehler beim Setzen des Pixel-Formats drin...
Dankeschön für Eure Hilfe!!! :-*


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:54 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