Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Qualität eines Icon verbessern? (https://www.delphipraxis.net/37854-qualitaet-eines-icon-verbessern.html)

Chris P 11. Jan 2005 13:21


Qualität eines Icon verbessern?
 
Hi Leute,

ich habe ein kleines Programm geschrieben, welches aus einem Dateinamen das Icon liefert.
Das funktiontiert ohne Probleme!

Aber warum hat das Icon eine schlechte Qualität wenn ich es abspeicher?


Zum Beispiel hat das Icon eines Word Docs nicht die Qualität des Originals!
Kann man die Auflösung beeinflußen?

Bernhard Geyer 11. Jan 2005 13:23

Re: Qualität eines Icon verbessern?
 
Icons können mit mehreren Auflösunge/Farbtiefen definiert sein.
Vermutlich fragst Du nur das Icon mit einer geringen Farbtiefe/Auflösung ab (Code wäre hilfreich)?

Chris P 11. Jan 2005 13:29

Re: Qualität eines Icon verbessern?
 
Delphi-Quellcode:
function IconFromFile(const Filename: string; IconIndex: Word = 0): HICON;
var
   Buffer: array[0..2 * MAX_PATH] of Char;
begin
   StrPCopy(Buffer, Filename);
   Result := ExtractAssociatedIcon(hInstance, Buffer, IconIndex);
end;

procedure SaveAsIcon(const FileName: string; Icon: TIcon);
begin
   if (Icon.Handle <> 0) then
        Icon.SaveToFile(Filename);
end;

Bernhard Geyer 11. Jan 2005 13:38

Re: Qualität eines Icon verbessern?
 
Probier mal die Funktion SHGetFileInfo. Dort kannst Du angeben, welche Infos (z.B. kleines/großes Icon) Du haben willst.

MagicAndre1981 11. Jan 2005 13:40

Re: Qualität eines Icon verbessern?
 
Hi,

ich glaube TIcon kann nur mit Icons, die 16 Farben haben richtig umgehen.

MagicAndre1981

Chris P 11. Jan 2005 13:47

Re: Qualität eines Icon verbessern?
 
Wie baut man SHGetFileInfo am Geschicktesten in meinen Source ein?

Christian Seehase 11. Jan 2005 13:49

Re: Qualität eines Icon verbessern?
 
Moin Chris,

ich denke wenn Du hier mal nach Hier im Forum suchenSHGetFileInfo suchst, wirst Du einige Fundstellen haben, die die Handhabung erklären.

perle 11. Jan 2005 14:11

Re: Qualität eines Icon verbessern?
 
alternativ auch so:


Delphi-Quellcode:
uses ShellApi;

procedure TForm1.FormCreate(Sender: TObject);
var
  kleines_icon, grosses_icon : HICON;
  icon : TIcon;
begin
  ExtractIconEx(Pchar(Application.Exename),0,grosses_icon,kleines_icon,1);
  with TIcon.Create do
    begin
      Handle := grosses_icon;
      SaveToFile('C:\icon_gross.ico');
      Handle := kleines_icon;
      SaveToFile('C:\icon_klein.ico');
      Free;
    end;
end;

Chris P 11. Jan 2005 14:26

Re: Qualität eines Icon verbessern?
 
@perle:

Guter Vorschlag, aber ich will nicht nur das Icon einer EXE, sondern von allen Dateien.

perle 11. Jan 2005 14:35

Re: Qualität eines Icon verbessern?
 
Code:
HICON ExtractIconEx(

    LPCSTR lpszFile,   
    int nIconIndex,   
    HICON FAR * phiconLarge,   
    HICON FAR * phiconSmall,   
    UINT nIcons    
   );   
 

lpszFile

Pointer to a null-terminated string specifying the name of an executable file, DLL, or icon file.
wie du siehst, kannst du der Funktion als ersten Parameter nicht nur "EXEn" übergeben.


EDIT : Stumpfsinn gepostet....vergiss das einfach :)

Chris P 11. Jan 2005 15:01

Re: Qualität eines Icon verbessern?
 
Ich hab das ganze mal versucht mit SHGetFileInfo, aber da kommt genau die selbe schlechte Qualität bei raus, wie bei dem Source ganz oben.

Mit ExtractIconEx bekommt man zwar nur Exe-Icons, aber die haben eine gute Qualität!

Das muss doch irgendwie auch mit anderen Icons gehen?

perle 11. Jan 2005 15:24

Re: Qualität eines Icon verbessern?
 
icons von jpg dateien z.b. werden doch in der Registry definiert. Lies doch dort den pfad zum entsprechenden icon aus und kopier es dir.


EDIT : Genau das hab ich jetzt auch mal probiert und es funktioniert im Grunde auch, allerdings habe ich dann ebenfalls eine recht miese Qualität der Icons :(

Delphi-Quellcode:
uses ShellApi, RegWork, LibDirectoryU, StrUtils;

procedure TForm1.FormCreate(Sender: TObject);
var
  big_icon, small_icon : HIcon;
  IconS : String;
begin
  IconS := rw.GetFileIconString('jpg');
  if pos('dll',IconS) > 0 then
   begin
     // wenn das Icon aus einer
     // dll geladen werden muss
     ExtractIconEx(PChar(copy(IconS,
                   0,
                   pos(',',IconS) - 1)),
                   StrToInt(RightStr(IconS,Length(IconS) - pos(',',IconS))),
                   big_icon,
                   small_icon,
                   1);
     with TIcon.Create do
     begin
       Handle := big_icon;
       SaveToFile(Applicationdir + 'big_icon.ico');
       Handle := small_icon;
       SaveToFile(Applicationdir + 'small_icon.ico');
     end;
   end;
end;

Chris P 11. Jan 2005 20:40

Re: Qualität eines Icon verbessern?
 
Wieso kann man die Qualität nicht besser machen??

Das muss doch irgendwie gehen?

Die Icons aufm Desktop werden doch auch richtig dargestellt.

Hat denn keiner eine Idee?

flomei 11. Jan 2005 20:42

Re: Qualität eines Icon verbessern?
 
Post doch mal nen Bild von so einem "schlechten" Icon.
Vielleicht werden die ja nur interpoliert dargestellt und sind in Wirklichkeit echt so hässlich?!?

MFG Florian :hi:

perle 12. Jan 2005 08:42

Re: Qualität eines Icon verbessern?
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ja sie sind hässlich :)

hier mal die beiden Icons (groß und klein) von einem JPEG


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:58 Uhr.

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