Entwickler-Ecke

Multimedia / Grafik - Merkwürdiges Verhalten eines TImage


jwinkl - Do 04.08.16 09:09
Titel: Merkwürdiges Verhalten eines TImage
Hallo,

ich suche eine Erklärung für das folgende merkwürdige Verhalten einer TImage-Komponente:

Man bestücke ein Formular mit einem TImage und zwei TButtons. Dann füge man folgenden Code hinzu:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Image1.Picture.Bitmap.SaveToFile('dummy.bmp');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Image1.Picture.Bitmap.LoadFromFile('dummy.bmp');
end;

procedure TForm1.FormCreate (Sender: TObject);
begin
  Image1.Picture.Bitmap.LoadFromFile ('mono.bmp');
  Image1.Picture.Bitmap.PixelFormat := pf32bit;
end;


Dabei ist 'mono.bmp' irgendeine monochrome Bitmap. Die Umwandlung des Pixelformats erfolgt, um alphatransparentes Zeichnen auf der Bitmap zu ermöglichen.

Drücht man jetzt die Buttons 1 und 2 mehrmals abwechselnd, dann rutscht die Bitmap jedes Mal um eine Pixelbreite nach links. Kommentiert man die Zeile mit dem Pixelformat aus, tritt dieser Effekt nicht auf.

Warum ???

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt


Sinspin - Fr 05.08.16 11:28

Hey,

Welche Delphi Version verwendest Du? VCL / FMX? Win Version?
Allgemein ist TBitmap eine gekapselte Windows Komponente. Was davon dann Windows ist und was Delphi, dazu muesste mann in die Quelltexte sehen.

Was passiert wenn Du vor dem speichern oder laden das Pixelformat nochmal festlegst?
Ist das speichern und laden als Bitmap unumgaeglich oder koenntest Du das auch anders loesen? Zum Beispiel via Scanline die Daten einfach RAW in eine Datei schreiben. TBitmap macht ja bei dem Pixelformat fast nix anderes.


JoelH - Fr 05.08.16 13:42

abgesehen davon ob dies unumgänglich ist oder nicht.

Offensichtlich gibts beim speichern oder laden des Filesstreams eine Veränderung des Files. Interessanterweise ist der Effekt bei farbigen Bitmaps nicht vorhanden. Wenn man sich die Bitmaps der Reihe abspeichern lässt dann verschwinden in den Files irgendwie leere Byte.


Nachvollziehbar bei mir mit XE7.


jwinkl - Fr 05.08.16 15:01

Hallo,

danke für die Reaktionen. Natürlich gibts verschiedene "workarounds" zur Lösung des Problems (z. B. eine "Zwischenbitmap", bei der man dann erst das Pixelformat setzt), doch wüsste ich gerne, worauf das Phänomen zurückzuführen ist. Und warum rutscht's gerade nach links und nicht z. B. auch nach oben?