Thema: Delphi Icon pixelfrei

Einzelnen Beitrag anzeigen

Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#10

Re: Icon pixelfrei

  Alt 2. Feb 2008, 14:13
Habe eine Funktion gefunden. Das Ergebnis sieht zwar besser aus, aber nicht gut genug. Es werden die weiten Pixel geschwärzt. Könnte man anstelle von Schwarz nicht einfach die Hintergrundfarbe nehmen und es wäre alles flüssig ?
Delphi-Quellcode:
function IconToBitmap(const IconHandle : HIcon) : TBitmap;
var IcoInfo : TIconInfo;
    Mask : TBitmap;
    X, Y : Word;
begin
  Mask := nil;
  Result := nil;
  if not GetIconInfo(IconHandle, IcoInfo) then
    Exit;

  try
    try
      Result := TBitmap.Create;
      Result.Handle := IcoInfo.hbmColor;
      Result.PixelFormat := pf32bit;

      Mask := TBitmap.Create;
      Mask.Handle := IcoInfo.hbmMask;
      Mask.PixelFormat := pf32bit;

      for X := 0 to Result.Width-1 do
        for Y := 0 to Result.Height-1 do
          pRGBALine(Result.Scanline[Y])^[X].rgbReserved := not pRGBALine(Mask.Scanline[Y])^[X].rgbRed;
    except
      FreeAndNil(Result);
    end;
  finally
    if Assigned(Mask) then
      Mask.Free;
  end;
end;

function GetIcon(filename : String; IconIndex: Integer) : TBitmap;
var NumberOfIcons : Integer;
    Ico : TIcon;
begin
  NumberOfIcons := ExtractIcon(hInstance, PChar(Filename), UINT(-1));

  Ico := TIcon.Create;
  if (Ico <> nil) and (NumberOfIcons > -1) then
    Ico.Handle := ExtractIcon(hInstance, PChar(Filename), IconIndex);
  Result := IconToBitmap(Ico.Handle);
  Result.Canvas.Draw(0, 0, Ico);
  Ico.Free;
end;
  Mit Zitat antworten Zitat