bmp to ico

Iniciado por BlackZeroX, 16 Septiembre 2009, 01:39 AM

0 Miembros y 1 Visitante están viendo este tema.

BlackZeroX

Alguien sabe como convertir una imagen a formato ico, lo que pasa es que me e trabado al extraer los iconos de un X archivo por ejemplo de un exe, dll, txt (Iconos segun la configuracion e la pc actual en tiempo actual) y posteriormente como es de esperarse mostrarlo en un hdc (en uno de memoria) y guardarlo pero como es de esperarse se guarda en formato BMP...

Uso las apis Extracticon, drawicon, assosiatedicon, yestaba pensando en usar las apis para los recursos de archivos  (LoadResource, FindResource, etc ) y de esta forma guardarlo con el cabezar de un formato ico, pero es muy laborioso, ademas que que no cuento con dicha informaciòn

a lo que voy es guardar de un hdco bmp a ico, el icono leido con extractico y dibujado en el ndc con drawico, omo se guardaria entonces, a un formato Valido .ico?

Dulces Lunas
The Dark Shadow is my passion.

LeandroA

hola te recomiendo veas este link mirate la clase cFileIcon esta muy buena.

algo mas sencillo pero los iconos se ven muy feos


Option Explicit
Private Declare Function OleCreatePictureIndirect Lib "oleaut32.dll" (pDicDesc As IconType, riid As CLSIdType, ByVal fown As Long, lpUnk As Object) As Long
Private Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long
Private Declare Function DestroyIcon Lib "user32.dll" (ByVal hIcon As Long) As Long

Private Type IconType
  cbSize                As Long
  picType               As PictureTypeConstants
  hIcon                 As Long
End Type

Private Type CLSIdType
  id(16)                As Byte
End Type

Private Function ExtractCompatibleIcon(sPathFile As String, IconIndex As Long) As IPictureDisp
 
  Dim Unkown                As IUnknown
  Dim Icon                  As IconType
  Dim CLSID                 As CLSIdType
  Dim hIcon                 As Long

  hIcon = ExtractIcon(0, sPathFile, IconIndex)




  With Icon
    .cbSize = Len(Icon)
    .picType = vbPicTypeIcon
    .hIcon = hIcon
  End With
 
  With CLSID
    .id(8) = &HC0
    .id(15) = &H46
  End With
 
  Call OleCreatePictureIndirect(Icon, CLSID, 1, Unkown)
  Set ExtractCompatibleIcon = Unkown

  DestroyIcon hIcon
End Function


Private Sub Form_Load()
    Me.Picture = ExtractCompatibleIcon("explorer.exe", 1)
    SavePicture ExtractCompatibleIcon("calc.exe", 0), "C:\calculadora.ico"
    'Me.Picture = LoadPicture("C:\calculadora.ico")
End Sub


Saludos



BlackZeroX

#2
Muchas gracias no sabia eso de OleCreatePictureIndirect, revisare mejor el cfileicon

Dulces Lunas.!¡
The Dark Shadow is my passion.