Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bild Tranparent machen ? (https://www.delphipraxis.net/94897-bild-tranparent-machen.html)

nitschchedu 27. Jun 2007 20:28


Bild Tranparent machen ?
 
Hallo Leute,
Ich habe mich jetzt schon ne weile hier umgeschaut und nix gefunden.
Ich will ein Bild laden dieses Tranparent machen und auf ein 2 Bild malen.
Ich weiß aber nicht wie ich es Transparent machen soll :gruebel:
KAnn mir jemand Helfen ?

lbccaleb 27. Jun 2007 20:40

Re: Bild Tranparent machen ?
 
Delphi-Quellcode:
image1.transparent := true
damit schaltest du im image die transparent funktion ein

wenn du das bild richtig durchsichtig machen willst musst du aber eine farbe angeben zb fuchasia, damit delphi auch die richtige farbe transparent darstellt

nitschchedu 27. Jun 2007 20:55

Re: Bild Tranparent machen ?
 
Liste der Anhänge anzeigen (Anzahl: 2)
Soweit ich weiß geht das doch nur für eine Farbe oder ? Das würde ja gehen bei mir.
Ich hänge mal 2 Bilder an das eine Würd das Orginal sein und das andere (mit Photoshop bearbeitet) so wie es dann aussehen soll.

lbccaleb 27. Jun 2007 21:14

Re: Bild Tranparent machen ?
 
ach du willst nen Grapical User Interface erstellen?? das hab ich auch schon mal gemacht, macht laune sowas, weiß nicht wieso ist aber so ;-)
schau mal hier:

post von mir früher



und hier

gui

nitschchedu 27. Jun 2007 21:31

Re: Bild Tranparent machen ?
 
Jo das mit der Tranzparent geht schon in die richtige richtung ^^.
Aber das ist ja ein Bild und kein Fenster.

Hier ist mal mein Code den ich bis jetzt habe.
Delphi-Quellcode:
var
  png: TPngObject;
  Can: TCanvas;
begin
png := TPNGObject.Create;
png.LoadFromFile('monitor.png');


<<<--- Hier müsste ich jetzt das Bild transparent machen :-(

Can := TCanvas.Create;
Can.Handle := GetWindowDC(GetDesktopWindow());
Can.Draw(20, 30, png);
end;

DGL-luke 27. Jun 2007 22:20

Re: Bild Tranparent machen ?
 
hallo,

dazu musst du es auch transparent malen :)

PNGImage sollte das können. Habs leider grad nicht installiert :(
vielleicht kann ich mrogen nachmittag ein bisschen beispielcode bauen. vielleicht aber auch erst am we.

nitschchedu 28. Jun 2007 14:40

Re: Bild Tranparent machen ?
 
Zitat:

Zitat von DGL-luke
dazu musst du es auch transparent malen :)

Genau das will ich wießen .... freue mich schon auf ein Bsp :-D

SirThornberry 28. Jun 2007 14:46

Re: Bild Tranparent machen ?
 
ein Beispiel wie man ein transparentes Bild malt? mit Delphi-Quelltext oder per Programme? Programme wie Photoshop etc. unterstützen dies auf verschiedene Art und Weise. Im übrigen geht das nicht nur mit png sondern auch mit Bitmaps auf 32bit-Basis

nitschchedu 28. Jun 2007 14:52

Re: Bild Tranparent machen ?
 
Obs png oder Bitmaps auf 32bit-Basis ist mir eigentlich egal ich will eben nur wießen wie ich das mache !! :o

SirThornberry 28. Jun 2007 14:59

Re: Bild Tranparent machen ?
 
naja, es ist jetzt eben die Frage ob du ein Programm schreiben willst das so ein Bild erstellt oder willst du das Bild mit einem Programm wie Photoshop erstellen?

Für Bitmaps könnte ich dir ein Programm geben. Da wählst du das Bild aus und fügst dann eine Maske hinzu (ein Graustufenbild). Die Make (Alphakanal) bestimmt wie durchsichtig das Bild ist. Schwarz bedeutet ganz transparent, grau halbtransparent und weiß eben nicht durchsichtig.
Du müsstest also einmal das Bild haben und dann ein Bild für den Alphakanal.

nitschchedu 28. Jun 2007 15:02

Re: Bild Tranparent machen ?
 
Mein Programm soll das Bild erstellen ^^ also zeig mal das Programm oder den Code :-D

SirThornberry 28. Jun 2007 15:04

Re: Bild Tranparent machen ?
 
Quelltext gibts von meinem Programm nicht. Aber es ist ganz einfach. Instanziere ein TBitmap, setze es auf die entsprechende größe und setzte das Pixelformat auf 32bit. Mit Scanline kannst du dir dann einen Pointer auf den Bildspeicher holen und den Alphakanal sowie die Farbkanäle manipulieren.

nitschchedu 28. Jun 2007 15:06

Re: Bild Tranparent machen ?
 
Ähhh ja ok kannste mir mal da ein Code Bsp machen ? Bitte !!! :)

SirThornberry 28. Jun 2007 15:15

Re: Bild Tranparent machen ?
 
folgender Quelltext erstellt dir ein schwarzes Bild (200x200) welches links oben ganz transparent ist nach rechts unten undurchsichtig wird. Anschließend wird es gespeichert unter:
c:\alphabmp.bmp
Delphi-Quellcode:
var
  lBmp     : TBitmap;
  lCountX,
  lCountY  : Integer;
  lPixel   : PRGBQuad;
begin
  lBmp := TBitmap.Create();
  lBmp.PixelFormat := pf32bit;
  lBmp.Width := 200;
  lBmp.Height := 200;
  for lCountY := 0 to lBmp.Height - 1 do
  begin
    lPixel := lBmp.ScanLine[lCountY];
    for lCountX := 0 to lBmp.Width - 1 do
    begin
      lPixel.rgbBlue := 0;
      lPixel.rgbGreen := 0;
      lPixel.rgbRed  := 0;
      lPixel.rgbReserved := Trunc((lCountX * lCountY) * 255 / (lBmp.Width * lBmp.Height));
      inc(lPixel);
    end;
  end;
  lBmp.SaveToFile('c:\alphabmp.bmp');
  lBmp.Free;
und hier das ganze nochmal ohne speicherung sondern mit direkter Ausgabe auf das Formular:
Delphi-Quellcode:
var
  lBmp         : TBitmap;
  lCountX,
  lCountY      : Integer;
  lPixel       : PRGBQuad;
  lBlendStruct : TBlendFunction;
begin
  lBmp := TBitmap.Create();
  lBmp.PixelFormat := pf32bit;
  lBmp.Width := 200;
  lBmp.Height := 200;
  for lCountY := 0 to lBmp.Height - 1 do
  begin
    lPixel := lBmp.ScanLine[lCountY];
    for lCountX := 0 to lBmp.Width - 1 do
    begin
      lPixel.rgbBlue := 0;
      lPixel.rgbGreen := 0;
      lPixel.rgbRed  := 0;
      lPixel.rgbReserved := Trunc((lCountX * lCountY) * 255 / (lBmp.Width * lBmp.Height));
      inc(lPixel);
    end;
  end;
  lBlendStruct.BlendOp             := AC_SRC_OVER;
  lBlendStruct.BlendFlags          := 0;
  lBlendStruct.SourceConstantAlpha := 255;
  lBlendStruct.AlphaFormat         := AC_SRC_ALPHA;
  Windows.AlphaBlend(Canvas.Handle, 0, 0, lBmp.Width, lBmp.Height, lBmp.Canvas.Handle, 0, 0, lBmp.Width, lBmp.Height, lBlendStruct);
  lBmp.Free;
end;

nitschchedu 28. Jun 2007 16:58

Re: Bild Tranparent machen ?
 
Ok Danke mit ne Bissel rumprobieren gehts ^^

nitschchedu 28. Jun 2007 17:52

Re: Bild Tranparent machen ?
 
Ich habe das ganze jetzt in eine Funktion gepackt

Delphi-Quellcode:


procedure ImageTranzparent(Graphic: TGraphic; iTransparent: Integer;
  NewCanvas: TCanvas);
var
   lBmp: TBitmap;
  transpro: Byte;
  lCountX, lCountY: Integer;
  lPixel: PRGBQuad;
  lBlendStruct: TBlendFunction;
begin
  if not ((iTransparent >= 0) and (iTransparent <= 100)) then
  begin
     if NewCanvas <> nil then
    begin
       NewCanvas.Draw(0, 0, Graphic);
    end;

     Exit;
  end;

   lBmp                   := TBitmap.Create();
  lBmp.PixelFormat   := pf32bit;
  lBmp.Width          := Graphic.Width;
  lBmp.Height          := Graphic.Height;

  lBmp.Canvas.Draw(0, 0, Graphic);

  transpro := Round(255 * iTransparent / 100);

  for lCountY := 0 to lBmp.Height - 1 do
  begin
    lPixel := lBmp.ScanLine[lCountY];

    for lCountX := 0 to lBmp.Width - 1 do
    begin
      lPixel.rgbReserved := transpro;
      inc(lPixel);
    end;
  end;

  lBlendStruct.BlendOp             := AC_SRC_OVER;
  lBlendStruct.BlendFlags          := 0;
  lBlendStruct.SourceConstantAlpha := 255;
  lBlendStruct.AlphaFormat         := AC_SRC_ALPHA;

  Windows.AlphaBlend(NewCanvas.Handle, 0, 0, lBmp.Width, lBmp.Height,
     lBmp.Canvas.Handle, 0, 0, lBmp.Width, lBmp.Height, lBlendStruct);
   
  lBmp.Free;
end;
Nun sehe ich aber die Umrantung die eigentlich Transparent schon war wieder :-(


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