IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Conversion jpg, bmp vers ico


Sujet :

Delphi

  1. #1
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut Conversion jpg, bmp vers ico
    Bonjour à tous,

    En ce moment, je suis assez dans le dessin
    Voilà, j'essaie de faire une application qui puisse convertir un bmp et jpg (pour le moment) en .ico

    J'ai fait quelque recherche sur le web et sur le forums mais j'ai pas vraiment de réponse. Je sais juste qu'un .ico est une image bmp redimensionné et auquel on applique une conversion de palette.

    Avec the gimp, lorsque je veux enregistrer un bmp vers un ico, il me marque ceci:
    4bpp, 1bit-alpha, 16 slot ...

    Je me demande comment m'y prendre pour cette conversion. Je ne sais pas du tout où chercher et donc par où commencer!

    Merci

    PS: Je ne veux pas de boite de dialogue Enregistrer sous ... En fait, via un cliquer glisser du fichier à convertir sur mon application, la conversion doit se faire immédiatement ...

  2. #2
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    TIcon descent de TGraphics.

    A voir mais la technique dont on parle depuis un moment sur d'autres post marcherais t elle ?

    A savoir : Charger un Bitmap, et faire un assigne sur un TIcon cree et parametré.
    Avec un peu de chance le save to file generera un ico, tel que cela se passe pour les Jpeg.

    A savoir que TIcon fait partit de la prop Picture d'un TImage, donc a priori, c'ets jouable.
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  3. #3
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut Clorish,

    Merci pour cette piste, mais je parviens pas à mes fins

    J'ai ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.Button1Click(Sender: TObject);
    var
    MonIcone:TImage;
    begin
    Image1.Picture.LoadFromFile('C:\tata.bmp');
    MonIcone:=TImage.Create(Self);
    MonIcone.Picture.Icon.Create;
    MonIcone.Picture.Icon.Assign(Image1);
    MonIcone.Picture.Icon.SaveToFile('C:\tata.ico');
    end;
    Avec ceci, j'ai une erreur, Delphi me dit qu'il est impossible d'affecter un TImage à un TIcon ...

    J'ai peut être mal compris ta démarche... ?
    Merci

  4. #4
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Citation Envoyé par ero-sennin
    J'ai peut être mal compris ta démarche... ?
    Sans vouloir te vexer ... c'est le cas

    J'entendais plutot quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TForm1.Button1Click(Sender: TObject);
    Var bmp : TBitmap;
        ico : TIcon;
    begin
    bmp := TBitmap.Create;
    Bmp.LoadFromFile('d:\bmptest.bmp');
    ico := TIcon.Create;
    ico.Assign(bmp);
    ico.Width := 32;
    ico.SaveToFile('d:\test.ico');
    Mais pas de bol .. autant ca passe pour les bmp->Jpeg .. autant la ca ne passe pas
    Va faloir trouver autre chose .....
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  5. #5
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Plutot curieux de nature j'ai voulu pousser un peu plus loin les recherche.
    J'ai trouvé sur un site ce petit bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    function BitmapToIcon(Bitmap: TBitmap): TIcon;
    var IconSizeX, IconSizeY : integer; 
    IconInfo: TIconInfo; IconBitmap, MaskBitmap: TBitmap;
    x, y: Integer; TransparentColor: TColor;
    begin 
    IconSizeX := GetSystemMetrics(SM_CXICON);
    IconSizeY := GetSystemMetrics(SM_CYICON);
    IconBitmap:= TBitmap.Create;
    IconBitmap.Width:= IconSizeX;
    IconBitmap.Height:= IconSizeY;
    IconBitmap.Canvas.StretchDraw(Rect(0, 0, IconSizeX, IconSizeY),Bitmap); 
    IconBitmap.TransparentColor:= Bitmap.TransparentColor;
    TransparentColor:= IconBitmap.TransparentColor and $FFFFFF;
    MaskBitmap:= TBitmap.Create;
    MaskBitmap.Assign(IconBitmap);
    for y:= 0 to IconSizeY - 1 do 
    for x:= 0 to IconSizeX - 1 do 
    if IconBitmap.Canvas.Pixels[x, y] = TransparentColor then 
    IconBitmap.Canvas.Pixels[x, y]:= clBlack;
    IconInfo.fIcon:= True;
    IconInfo.hbmMask:= MaskBitmap.MaskHandle;
    IconInfo.hbmColor:= IconBitmap.Handle;
    Result:= TIcon.Create;
    Result.Handle:= CreateIconIndirect(IconInfo);
    MaskBitmap.Free;
    IconBitmap.Free;
    end;
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  6. #6
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Je ne suis pas vexé, t'inquiètes

    Ok! Bon, je vais devoir chercher une autre piste alors! Bon, j'avais une petite idée, c'est de modifier l'image ... mais là ... je touche à des choses toutes nouvelles lol.

    Peut être que je cherche compliqué aussi

    PS: Nos posts se sont croisés! Je vais regarder ton code plus en détails! Je ne sais pas si ce soir je pourrai. En revanche, je te tiendrai au courant

  7. #7
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Bon, j'ai pas pu m'empêcher de laisser mes activités de coter et de tester ton code.

    J'ai le regret de t'annoncer que ce n'est pas parfait
    Il va falloir que je regarde cela de plus prêt ... il me met de la transparence là ou j'ai du gris! Pas bon ça... Enfin bref, c'est une bonne piste qui mérite son attention

  8. #8
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Citation Envoyé par ero-sennin
    Bon, j'ai pas pu m'empêcher de laisser mes activités de coter et de tester ton code.
    Arf .... encore un pauvre gars ateint de Programïte-Aigue ...
    Quand cessera cette epidemie !!


    Citation Envoyé par ero-sennin
    J'ai le regret de t'annoncer que ce n'est pas parfait
    Il va falloir que je regarde cela de plus prêt ... il me met de la transparence là ou j'ai du gris! Pas bon ça... Enfin bref, c'est une bonne piste qui mérite son attention
    Alors ...
    1 - C'est pas mon code
    2 - Ya un parametre qui gere la transparence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    MaskBitmap:= TBitmap.Create;
    MaskBitmap.Assign(IconBitmap);
    for y:= 0 to IconSizeY - 1 do 
    for x:= 0 to IconSizeX - 1 do 
    if IconBitmap.Canvas.Pixels[x, y] = TransparentColor then 
      IconBitmap.Canvas.Pixels[x, y]:= clBlack;
    C'ets le masque qui gere la transparence.
    J'imagine que clBlack = Transparent et clWhite = opaque
    Corrige peut etre l'affectation de transparentColor a IconBitmap.
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  9. #9
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Citation Envoyé par Clorish
    Arf .... encore un pauvre gars ateint de Programïte-Aigue ...
    Quand cessera cette epidemie !!
    Jamais elle gagne du terrain

    Citation Envoyé par Clorish
    Alors ...
    1 - C'est pas mon code
    2 - Ya un parametre qui gere la transparence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      MaskBitmap:= TBitmap.Create; MaskBitmap.Assign(IconBitmap); for y:= 0 to IconSizeY - 1 do for x:= 0 to IconSizeX - 1 do if IconBitmap.Canvas.Pixels[x, y] = TransparentColor then IconBitmap.Canvas.Pixels[x, y]:= clBlack;

    C'ets le masque qui gere la transparence.
    Oui, j'ai remarqué aussi!
    Là honnêtement, va falloir je cherche un peu! Le temps de bien décortiquer et pas faire au pif ... Bé oui, j'aime quand ca fonctionne mais aussi quand je comprends

  10. #10
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    [QUOTE=ero-sennin
    Là honnêtement, va falloir je cherche un peu! Le temps de bien décortiquer et pas faire au pif ... Bé oui, j'aime quand ca fonctionne mais aussi quand je comprends [/QUOTE]

    Ca c'est yune bonen chose.
    Si tu as besoin de details
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  11. #11
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,

    convertir un bmp et jpg (pour le moment) en .ico
    Vous pourrez trouver des codes de conversion de .ICO vers .BMP et de .BMP vers .ICO et d'autres manips avec des .ICO ici :
    http://www.swissdelphicenter.ch/torry/grafik.php
    ... par contre pour convertir .JPG en .ICO il suffit de convertir de .JPG en .BMP puis de .BMP en .ICO à moins de trouver une soluce plus directe sur un autre site ... mais faute de mieux ça peut dépanner.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  12. #12
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Je trouve la solution de ceonversion BMP to ICO un peu lourde en passant par les TImageList.

    Par contre, fouiller dans les sources de ImageList pour en extraire le code de conversion ca peut etre interessant.

    Mais a priori, cela semble se rapprocher de la solution precedente (usage de mask)
    A pres tout un Icon, c'ets rien de plus d'un Bitmap de 32x32 avec un masque dessus
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  13. #13
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Bon, après des recherches et des tests, je n'arrive pas à trouver mon bonheur.

    La solution que tu me proposes Gilbert Geyer je l'avais déjà tester hier soir, mais je n'avais pas obtenu satisfaction ...

    En faite, ce qui se passe c'est :
    - Couleurs mal restituées : piètre qualité
    - Si j'ai une icone sur fond blanc, j'ai de la transparence à la place :s

    Sinon, j'avais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    function BitmapToIcon(Bitmap: TBitmap): TIcon;
    var
      IconBitmap, MaskBitmap: TBitmap;
      SizeX:integer;
      SizeY:integer;
      iconInfo : TIconInfo;
    begin
      IconBitmap:=TBitmap.Create;
      SizeX:=GetSystemMetrics(SM_CXICON);
      SizeY:=GetSystemMetrics(SM_CYICON);
      IconBitmap.Width:=SizeX;
      IconBitmap.Height:=SizeY;
      MaskBitmap := TBitmap.Create;
      IconBitmap.Canvas.StretchDraw(Rect(0, 0, SizeX+1, SizeY),Bitmap);
      MaskBitmap.Assign(IconBitmap);
      with iconInfo do
         begin
           fIcon:=true;
           hbmMask := MaskBitmap.Handle;
           hbmColor := MaskBitmap.Handle;
         end;
      Result:=TIcon.Create;
      Result.Handle:=CreateIconIndirect(iconInfo);
    end;
    Mais j'ai les mêmes problèmes...
    Alors, il me faudrait, c'est supprimer la transparence (j'ai pas encore trouvé)
    Récupérer la taille de l'image, et de lui appliquer un format 32*32 (normalement c'est ok ca)

    Et c'est tout pour le moment

  14. #14
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Pour resoudre les problemes de transparence je ferais ceci sur le masque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    MaskBitmap := TBitmap.Create;
    MaskBitmap.Width := IcoBitmap.width;
    MaskBitmap.Height := IcoBitmap.Height;
    MaskBitmap.canvas.brush.color := clWhite;
    MaskBitmap.canvas.fillrect(MaskBitmap.Canvas.ClipRect);
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  15. #15
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Bonjour,
    Ero-sennin a écrit :
    La
    solution que tu me proposes Gilbert Geyer je l'avais déjà tester hier soir, mais je n'avais pas obtenu satisfaction ...
    ... tu dis "La" :
    ... c'est celle-ci : procedure bmp2ico(Image: TImage; FileName: TFilename);
    ... ou bien celle-là : function CreateIconFromBitmap(Bitmap: TBitmap; TransparentColor: TColor): TIcon;
    ... car il y en deux dans la même liste
    ... (signalé à toutes fins utiles).
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  16. #16
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 266
    Points
    3 266
    Par défaut
    Re-bonjour,

    Rectif de mon post précédent : j'ai testé function CreateIconFromBitmap(Bitmap: TBitmap; TransparentColor: TColor): TIcon mais c'est pas génial,
    ne marche que si on envoie comme paramètres un Bmp original dont la couleur de transparence est celle de son pixel de l'angle-inférieur-gauche et alors l'icône présente des parties transparentes. Mais quand on lui envoie dans les mêmes conditions un Bmp découpé dans un Bmp-original-plus-grand l'icône qui en résulte est entièrement invisible.

    Par contre j'ai trouvé sur le site d'efg2 un code qui ressemble en de nombreux points à celui d'Ero-sennin et à propos duquel il dit :
    Mais j'ai les mêmes problèmes...
    Alors, il me faudrait, c'est supprimer la transparence ...
    ... mais qui chez moi n'ajoute aucune transparence même avec un bmp à fond blanc et qui marche également avec un Bmp découpé dans un Bmp-original-plus-grand.
    ... voici le code en question, les parties que j'ai relguées derrière des // faisaient partie du code initial d'efg2 je les ai laissés en souvenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    function BitmapToIcon(Bitmap: TBitmap): TIcon;
    var      IconSizeX, IconSizeY : integer;
             IconInfo: TIconInfo; IconBitmap,
             MaskBitmap: TBitmap; x, y: Integer; //TransparentColor: TColor;
    begin    IconSizeX := GetSystemMetrics(SM_CXICON);
             IconSizeY := GetSystemMetrics(SM_CYICON);
             IconBitmap:= TBitmap.Create;
             IconBitmap.Width:= IconSizeX;
             IconBitmap.Height:= IconSizeY;
             IconBitmap.Canvas.StretchDraw(Rect(0, 0, IconSizeX, IconSizeY), Bitmap);
             {IconBitmap.TransparentColor:= Bitmap.TransparentColor;
             TransparentColor:= IconBitmap.TransparentColor and $FFFFFF;  }
             MaskBitmap:= TBitmap.Create;
             MaskBitmap.Assign(IconBitmap);
             {for y:= 0 to IconSizeY - 1 do
             for x:= 0 to IconSizeX - 1
             do if IconBitmap.Canvas.Pixels[x, y] = TransparentColor
                then IconBitmap.Canvas.Pixels[x, y]:= clBlack; ???}
             IconInfo.fIcon:= True;
             IconInfo.hbmMask:= MaskBitmap.MaskHandle;
             IconInfo.hbmColor:= IconBitmap.Handle;
             Result:= TIcon.Create;
             Result.Handle:= CreateIconIndirect(IconInfo);
             MaskBitmap.Free;
             IconBitmap.Free;
    end;
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  17. #17
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Re-Bonjour,

    Ah, chez moi j'ai pas le même résultat que toi.
    Teste une chose...
    Tu ouvres paint, tu dessines divers trait en couleur et tu appliques le code que tu as postés pour la conversion en ico.
    Sauf erreur de ma part, la transparence et belle et bien présente.

    La solution que tu proposes est celle que Clorish avait posté auquel justement je devais soit commenter les passages qui ne m'intéressaient où encore le modifier.

    C'est un vrai casse tête Je recherche encore un peu mais je crois que je vais devoir laisser tombé

    En tout cas, merci de vous pencher sur mon cas

  18. #18
    Fxg
    Fxg est déconnecté
    Membre éclairé
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur financier

    Informations forums :
    Inscription : Septembre 2003
    Messages : 510
    Points : 837
    Points
    837
    Par défaut
    Bonjour,

    Je ne sais pas si c'est la réponse que tu attends mais tu peux utiliser la bibliothèque GFL SDK de xnview qui permet la conversion entre format (à priori les .ico sont pris).

    Par contre là où le bat blesse c'est que cela ne résoud pas la question de la compréhension du mécanisme....

    c'est donc un demi résolu ?

  19. #19
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Bon, j'ai trouvé quelque chose.
    Si on fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    IconSizeX := GetSystemMetrics(SM_CXICON);
    IconSizeY := GetSystemMetrics(SM_CYICON);
    IconBitmap:= TBitmap.Create;
    IconBitmap.Width:= IconSizeX;
    IconBitmap.Height:= IconSizeY;
    IconBitmap.Canvas.StretchDraw(Rect(0, 0, IconSizeX, IconSizeY),Bitmap);
    MaskBitmap:= TBitmap.Create;
    MaskBitmap.Width := IconBitmap.Width;
    MaskBitmap.Height := IconBitmap.Height;
     
    IconInfo.fIcon:= True;
    IconInfo.hbmMask:= MaskBitmap.MaskHandle;
    IconInfo.hbmColor:= IconBitmap.Handle;
    Result:= TIcon.Create;
    Result.Handle:= CreateIconIndirect(IconInfo);
    MaskBitmap.Free;
    IconBitmap.Free;
    Ca marche : Il n'y a plus de transparence.
    Par contre j'ai pas trop compris comment fonctionne la transparence ....

    Pour info :
    Citation Envoyé par SDK Windows
    The ICONINFO structure contains information about an icon or a cursor.

    typedef struct _ICONINFO { // ii
    BOOL fIcon;
    DWORD xHotspot;
    DWORD yHotspot;
    HBITMAP hbmMask;
    HBITMAP hbmColor;
    } ICONINFO;


    Members

    fIcon

    Specifies whether this structure defines an icon or a cursor. A value of TRUE specifies an icon; FALSE specifies a cursor.

    xHotspot

    Specifies the x-coordinate of a cursor's hot spot. If this structure defines an icon, the hot spot is always in the center of the icon, and this member is ignored.

    yHotspot

    Specifies the y-coordinate of the cursor's hot spot. If this structure defines an icon, the hot spot is always in the center of the icon, and this member is ignored.

    hbmMask

    Specifies the icon bitmask bitmap. If this structure defines a black and white icon, this bitmask is formatted so that the upper half is the icon AND bitmask and the lower half is the icon XOR bitmask. Under this condition, the height should be an even multiple of two. If this structure defines a color icon, this mask only defines the AND bitmask of the icon.

    hbmColor

    Identifies the icon color bitmap. This member can be optional if this structure defines a black and white icon. The AND bitmask of hbmMask is applied with the SRCAND flag to the destination; subsequently, the color bitmap is applied (using XOR) to the destination by using the SRCINVERT flag.
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  20. #20
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Et un problème en moins avec la méthode de Clorish (idem, pas compris comment fonctionne la transparence)

    Cependant, c'est toujours mon problème de qualité ...
    Lorsque je regarde avec un logiciel de conversion, j'ai bien mon icône mais carrément plus net ...

    Je ne suis pas calé du tout en matière de dessin, canvas, palette couleur etc etc.


    J'ai comparé 2 icones, l'une crée avec le bout de code, et l'autre avec the gimp, et j'ai trouvé ce qui ne va pas.
    Apparemment, il faut créer une palette car, je pense que le bout de code, par défaut créer une icone de :
    1bpp,1bit-alpha,2slot palette

    et ce serait bien de faire

    32bpp,8bit-alpha,256slot palette

    Enfin j'en dis pas plus car j'ai peur déjà que ce que je viens de dire soit faux ...
    Je regarderai voir si dans les tutos, il n'y a pas quelques choses sur les palettes, assigné une palette à un graphics ...

    En tout cas merci

Discussions similaires

  1. Conversion BMP vers JPG ou PNG
    Par toine92 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 31/03/2010, 11h25
  2. Conversion Bmp vers Jpeg
    Par Maria1505 dans le forum MFC
    Réponses: 5
    Dernier message: 16/05/2007, 15h00
  3. Exportation vers des formats jpg, bmp, pdf
    Par lio33 dans le forum MFC
    Réponses: 5
    Dernier message: 19/05/2006, 16h25
  4. Conversion Jpg -> BMP
    Par ygor dans le forum C++Builder
    Réponses: 3
    Dernier message: 25/04/2005, 16h26
  5. Conversion jpg -> bmp
    Par KNETUS dans le forum Assembleur
    Réponses: 15
    Dernier message: 10/08/2004, 18h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo