Thema: Delphi RGB zu Alpha

Einzelnen Beitrag anzeigen

Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.077 Beiträge
 
Delphi XE2 Professional
 
#14

AW: RGB zu Alpha

  Alt 19. Aug 2018, 11:58
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
Auch wenn Du schriebst, es sei erledigt:
Wenn ich das richtig verstehe, errechnest du mit "Rgb2Alpha" für jedes Pixel aus den RGB-Werten einen "Grau-Wert. Wenn dieser = 0 (Schwarz) ist und pBits[3] = 0 ist, denn setzt du pBits[3] = 0 (Warum eigentlich= ist doch schon 0)
andernfalls, wenn der Grau-Wert <> 0 ist und pBits[3] = 0 ist dann setzt du pBits[3] = 255.
Problem dürfte sein, dass Deine "Rgb2Alpha" nicht korrekt arbeitet.
So sollte die korrekte Ergebnisse liefern:
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))
      Result := round(colrRGB and $FF * 0.2989) +
                round(colrRGB shr 8 and $FF * 0.5870) +
                round(colrRGB shr 16 * 0.114)
    else
    Result := 0;
end;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat