Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi RGB zu Alpha (https://www.delphipraxis.net/197574-rgb-zu-alpha.html)

EWeiss 17. Aug 2018 21:38


RGB zu Alpha
 
Kann jemand helfen ?
Mein Versuch..

Delphi-Quellcode:
function Rgb2Alpha(colrRGB: Colorref): Byte;
begin
   if colrRGB <> 0 then
     Result := LOBYTE(round(colrRGB * 0.2989)) + LOBYTE(round((colrRGB shr 8) * 0.5870)) +
       LOBYTE(round((colrRGB shr 16) * 0.114))
   else
   Result := 0;
end;

procedure TSkinEngine.SetupAlphaChannel(DC: HDC);
var
  bm: BITMAP;
  P: integer;
  Alpha: byte;
  pBits: PByte;
begin

  FillChar(bm, sizeof(bm), 0);

  GetObject(GetCurrentObject(DC, OBJ_BITMAP), sizeof(bm), @bm);
  pBits := bm.bmBits;
  for P := 0 to (bm.bmWidth * bm.bmHeight) -1 do
  begin
    Alpha := (Rgb2Alpha(RGB(pBits[2], pBits[1], pBits[0])) and $000000FF);
    if ((Alpha = 0) and (pBits[3] = 0)) then
      pBits[3] := 0
    else
    if (pBits[3] = 0) then
      pBits[3] := 255;

    inc(pBits, 4);
  end;
end;
Das Problem ist einmal funktioniert es dann wieder nicht!
Das erste schlecht das zweite gut.

gruss

Schokohase 17. Aug 2018 22:04

AW: RGB zu Alpha
 
Alpha in Zusammenhang mit RGB ist die Transparenz und die kann man aus dem RGB-Wert nicht berechnen, denn diese wäre eine zusätzliche Angabe.

EWeiss 17. Aug 2018 22:09

AW: RGB zu Alpha
 
Zitat:

Zitat von Schokohase (Beitrag 1411007)
Alpha in Zusammenhang mit RGB ist die Transparenz und die kann man aus dem RGB-Wert nicht berechnen, denn diese wäre eine zusätzliche Angabe.

Hmm.. also wenn der Hintergrund Transparent ist wie im zweiten Bild dann geht es ansonsten nicht.
Kann man doch sehen am Bild ;)

gruss

EWeiss 17. Aug 2018 22:45

AW: RGB zu Alpha
 
Danke ist erledigt habe es gefixt.

1. Pic vorher
2.Pic Aktuell

gruss

himitsu 17. Aug 2018 22:49

AW: RGB zu Alpha
 
ARGB,

für die, welche die die Lösung nicht mitbekommen haben.

EWeiss 17. Aug 2018 23:04

AW: RGB zu Alpha
 
Zitat:

Zitat von himitsu (Beitrag 1411011)
ARGB,

für die, welche die die Lösung nicht mitbekommen haben.

Dadurch sind sie jetzt auch nicht schlauer ;)

ARGB hat damit nichts zu tun..
Wenn ihr die Function richtig interpretieren würdet dann könnt ihr sehen das ich alle von außen sichtbaren Schwarzen Pixel nach Alpha 0 konvertiere..
Also RGB zu Alpha und dafür benötige ich den Alpha wert nicht da ich ihn selbst erstelle.

Aber egal ist erledigt.

gruss

Redeemer 18. Aug 2018 14:24

AW: RGB zu Alpha
 
himitsu und Schokohase ihr Ketzer! EWeiss kann Wasser in Wein verwandeln.

EWeiss 18. Aug 2018 16:32

AW: RGB zu Alpha
 
Zitat:

Zitat von Redeemer (Beitrag 1411028)
himitsu und Schokohase ihr Ketzer! EWeiss kann Wasser in Wein verwandeln.

:thumb:

KodeZwerg 18. Aug 2018 20:19

AW: RGB zu Alpha
 
Alpha kann auch höchster Wert im RGB Spektrum bedeuten (highbit), bei Pixel x/y. Da ich eh falsch liege in Bezug zu EWeiss hab ichs nicht erwähnt.

EWeiss 18. Aug 2018 20:44

AW: RGB zu Alpha
 
Zitat:

Zitat von KodeZwerg (Beitrag 1411047)
Alpha kann auch höchster Wert im RGB Spektrum bedeuten (highbit), bei Pixel x/y. Da ich eh falsch liege in Bezug zu EWeiss hab ichs nicht erwähnt.

Ich habe zwar geschrieben
Delphi-Quellcode:
Alpha := (Rgb2Alpha(RGB(pBits[2], pBits[1], pBits[0])) and $000000FF);

Aber nochmal es geht darum alle schwarzen Pixel zu entfernen.

Also wenn Alpha 0 ist dann wird
pBits.rgbReserved auf 0 gesetzt ( := pBits[3])
also komplett durchsichtig. Die Farbe schwarz in dem Fall wird mit dem Alpha Wert 0 ersetzt.
andernfalls pBits.rgbReserved := 255

Und deshalb kann ich Wasser in Wein verwandeln.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:11 Uhr.
Seite 1 von 4  1 23     Letzte »    

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