Icons pixelfrei mit Canvas zeichnen

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Icons pixelfrei mit Canvas zeichnen

Beitrag von Nils »

Hi,

ich brauch dringend ein kleines Tool. Deshalb habe ich schnell was programmiert und nun kann man es benutzen. Es zeichnet mir Icons aus Programmen via Canvas auf die Form (Canvas reicht in dem Fall aus) aber die Icons sehen sehr pixelig aus. Ich habe bisher diesen Code:

Code: Alles auswählen

procedure GetIcon(filename : String; IconIndex: Integer; var Result : TBitmap);
var Ico : TIcon;
begin
  Ico := TIcon.Create;
  Ico.Handle := ExtractIcon(hInstance, PChar(Filename), IconIndex);
  Result := TBitmap.Create;
  with Result do
  begin
    Width  := Ico.Width;
    Height := Ico.Height;
    DrawIconEx(Canvas.Handle, 0, 0, Ico.Handle, 0, 0, 0, 0, DI_NORMAL);
  end;
  Ico.Free;
end;
Das liest mir ein Icon aus einem Programm aus (alles dynamisch) und schickt es an Result. Verpixelt. Vorher hatte ich diesen Code:

Code: Alles auswählen

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 := TBitmap.Create;
  with Result do
  begin
    Width  := Ico.Width;
    Height := Ico.Height;
    Canvas.Draw(0, 0, Ico);
  end;
  Ico.Free;
end;
Mal abgesehen davon, dass der noch einen kleinen Speicherleck hat, ist er ganz genauso verpixelt wie der obige.

Nun gibt es zwei Möglichkeiten:
1. Mal angenommen ihr könntet mir helfen es mit dem obigen hinzubekommen. Wie löst man das dann unter Linux ?
2. Ihr könnt mir beim unteren helfen. Geht das auch einfach so mit Linux ? Denn Linux hat ja glaube ich ein komplett anderes Iconsystem (Icons in Verknüpfungen war es glaube ich).
Dateianhänge
Dieses Bild entsteht bei BEIDEN Funktionen.
Dieses Bild entsteht bei BEIDEN Funktionen.
Verpixelt.PNG (7.53 KiB) 800 mal betrachtet

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Hallo Nils!

Sind das eigene Icons? Sieht für mich so aus, als müsstest du noch eine Transparenzfarbe definieren, da die Icons scheinbar einen gelblichen Rand haben.

Gruß, Euklid

Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

Beitrag von Nils »

Das sind keine eigenen Icons. Es kann sozusagen jedes Icon sein. Das heißt vier der Icons sind eigene, aber es können genauso fremde sein (siehe Firefox).
Meine Musik: spiker-music.net

Antworten