AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bild Tranparent machen ?
Thema durchsuchen
Ansicht
Themen-Optionen

Bild Tranparent machen ?

Ein Thema von nitschchedu · begonnen am 27. Jun 2007 · letzter Beitrag vom 28. Jun 2007
Antwort Antwort
Seite 2 von 2     12   
nitschchedu

Registriert seit: 24. Mär 2006
300 Beiträge
 
Delphi 7 Professional
 
#11

Re: Bild Tranparent machen ?

  Alt 28. Jun 2007, 15:02
Mein Programm soll das Bild erstellen ^^ also zeig mal das Programm oder den Code
Programmieren ..... .
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Bild Tranparent machen ?

  Alt 28. Jun 2007, 15:04
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
nitschchedu

Registriert seit: 24. Mär 2006
300 Beiträge
 
Delphi 7 Professional
 
#13

Re: Bild Tranparent machen ?

  Alt 28. Jun 2007, 15:06
Ähhh ja ok kannste mir mal da ein Code Bsp machen ? Bitte !!!
Programmieren ..... .
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Bild Tranparent machen ?

  Alt 28. Jun 2007, 15:15
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;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
nitschchedu

Registriert seit: 24. Mär 2006
300 Beiträge
 
Delphi 7 Professional
 
#15

Re: Bild Tranparent machen ?

  Alt 28. Jun 2007, 16:58
Ok Danke mit ne Bissel rumprobieren gehts ^^
Programmieren ..... .
  Mit Zitat antworten Zitat
nitschchedu

Registriert seit: 24. Mär 2006
300 Beiträge
 
Delphi 7 Professional
 
#16

Re: Bild Tranparent machen ?

  Alt 28. Jun 2007, 17:52
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
Programmieren ..... .
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 01: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