AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi gr32 | Eine Farbe als Transparent markieren
Thema durchsuchen
Ansicht
Themen-Optionen

gr32 | Eine Farbe als Transparent markieren

Ein Thema von halinchen · begonnen am 23. Jul 2007 · letzter Beitrag vom 23. Jul 2007
Antwort Antwort
Benutzerbild von halinchen
halinchen

Registriert seit: 13. Jun 2006
508 Beiträge
 
Delphi 2007 Professional
 
#1

Re: gr32 | Eine Farbe als Transparent markieren

  Alt 23. Jul 2007, 10:15
siehe meinem edit. Sry war vielleicht etwas schelcht formuliert.

Meine Anwendung von turboPASCALs Funktion hat nichts mit ihrer eigentlichen zutun. Ich will den Bereich im Bitmap und nicht in der Form Transparent machen.

edit: Ich hab das so kapiert: TBitmap32 untestützt AlphaTransparenz. Also kann ich meinetwegen den Pixel [5,5] auf 50% durchsichtigkeit setzen. Beim Zeichen mischen sich dann 50% der Farbe darunter mit der neuen Farbe.

Ich will aber die Transparenz an allen Pixel wo die Farbe clFuchsia ist auf 100% setzen. Beim Zeichnen sollen sich dann 100% der Farbe darunter und 0% der Farbe clFuchsia mischen. Somit hätte der Button keinen Rand und man sieht dort den hellblauen Hintergrund.

Sry. Ich arbeite das 1. Mal mit gr32 und bei normalen Bitmaps musste ich einfach nur Transparent auf true setzen.

edit2:in der Hilfe zu gr32 steht:

Zitat:
Alpha := Color32 shr 24;
Aber bei allen Pixeln ist dann Alpha = 0. d.h es schon transparent. Aber warum wird es beim zeichnen nicht berücksicht?

edit3: Ich hab's. Man muss DrawMode auf dmTransparent setzen.

Hier nochmal die gesamte Code:

Delphi-Quellcode:
procedure TfrmMain.MenuDraw;
var
  temp32: TBitmap32;
  temp : TBitmap;

  PixelPtr : PColor32;
  x,y:integer;
begin
 temp := TBitmap.Create;
 try
  temp32 := TBitmap32.Create;
  try
    temp32.Assign(bmpBackground);
    bmpMenu.Draw(0,0,temp32);
    imgBtn.GetBitmap(0,temp);
    temp32.Assign(temp);
    SetTransparent(temp32,Color32(clFuchsia));
    temp32.DrawMode := dmTransparent;
    bmpMenu.Draw(Rect(171,36,171+300,36+50),Rect(1,1,temp32.Width-1,temp32.Height-1),temp32);
    //bmpMenu.Draw( 171,36,temp32);
  finally
    temp32.Free;
  end;
 finally
  temp.Free;
 end;
end;

procedure TfrmMain.SetTransparent(DstBitmap: TBitmap32;TransparentColor: TColor32);
var
  PixelPtr: PColor32;
  X, Y: Integer;
begin
  DstBitmap.ResetAlpha;

  PixelPtr := PColor32(@DstBitmap.Bits[0]);
  for X := 0 to (DstBitmap.Height) * (DstBitmap.Width) do
  begin
    if PixelPtr^ = TransparentColor then begin
      //PixelPtr^ := PixelPtr^ and $00FFFFFF;
      PixelPtr^ := 0;

    end;
    Inc(PixelPtr);
  end;

end;
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz