Entwickler-Ecke

Multimedia / Grafik - png-datei als bild in image-komponente einlesen??


Affje - Fr 22.08.03 20:49
Titel: png-datei als bild in image-komponente einlesen??
hi

ich bin gerade dabei, ein kleines spiel zu programmieren, jedoch habe ich ein problem. ich will in meine image komponente ein png bild einlesen, da ich ein format nehmen muss, dass transparenz unterstüzt. gibts da eine möglichkeit????


worm - Fr 22.08.03 23:10

Ein bisschen Google: http://pngdelphi.sourceforge.net/
Falls du keinen echten Alpha-Kanal benötigst, sondern nur einfache Transparenz wie bei GIFs, geht's auch mit 'ner Bitmap.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
var b: TBitmap;
begin
  b := TBitmap.Create;
  try
    with b do
    begin
      LoadFromFile('xyz.bmp');
      //Optional, falls nicht die Farbe links unten transparent werden soll
      {TransparentMode := tmFixed;
      TransparentColor := clFuchsia;}

      Transparent := True;
    end;
    Canvas.Draw(10,10,b);
  finally
    b.Free;
  end;
end;


Affje - Mo 25.08.03 22:16

was ist ein alpha-kanal??


worm - Di 26.08.03 22:05

Ein Alpha-Kanal ist ein Kanal (neben Rot, Grün, Blau), der die Transparenz angibt. Er wird meistens in Graustufen dargestellt, dabei wäre weiß = völlig undurchsichtig und schwarz = völlig transparent. Die Grauwerte sind dann die Zwischenstufen, also halbtransparent. Der Alpha-Kanal eignet sich somit, um auch z.B. Schatten oder "antialiaste" Ränder abzuspeichern.
Bei Gifs ist der Alphakanal nur monochrom (also nur schwarz und weiß, kein Grau).


Affje - Di 26.08.03 22:43

kann mir jemand mal ein beispiel geben, wie ich ein png bild lade, wenn ich auf einen button drücke??


Udontknow - Mi 27.08.03 17:31

Hi!

Also meines Wissens wird PNG nicht so ohne weiteres von TImage unterstützt. Du müsstest also mal schauen, ob du nicht eine Unit oder Komponente für dieses Format findest.

BTW: Ein Alpha-Kanal stellt nicht unbedingt Transparenz dar. Es ist einfach ein weiterer Kanal, der alles mögliche bedeuten kann; z.B. kann dies eine Heightmap für Bumpmapping-Effekte darstellen. Bei Gifs wird die Transparenz einfach durch eine Farbe definiert, die dann als "unsichtbar" bzw."durchsichtig" gilt. Alle Pixel mit dieser Farbe werden dann nicht gezeichnet. Ein richtiger Alpha-Kanal ist dafür nicht nötig.

Cu, :)
Udontknow


worm - Do 28.08.03 18:34

@Udontknow: Zum Thema "PNG mit TImage" siehe meinen allerersten Post in diesem Thread.
Mit den Alpha-Kanälen hast Du recht - das mit dem Monochromen Alpha-Kanal hab ich nur als Vergleich zu den "genaueren" Alpha-Kanälen gesagt. Umgesetzt ist es so, wie Du's gesagt hast. :)