¿Alguien sabe de una clase que puede leer iconos de multitrama? La búsqueda en Internet no ha producido ninguna información.Cargar iconos MultiFrame
Probé con IconTools 2.0 de Alan Peter Stotz, que carga correctamente los iconos en una lista, pero la profundidad de bits para los iconos de 8 y 4 bits retorna como 0. La profundidad de bits para los marcos de iconos de 32 y 24 bits se devuelve correctamente, sin embargo.
El icono en sí aparece correcto al visualizar ... solo la profundidad de bits es incorrecta para los bits mencionados.
editar # 2 baised en el comentario de Tlama Aquí hay un código no probado:
function NumberOfIcons (AFileName: string): integer;
var
iNumberOfIcons: Integer;
begin
iNumberOfIcons := ExtractIcon (hInstance, PChar (AFilename), UINT (-1));
Result := iNumberOfIcons;
end;
function ExtractAnIcon (AFilename: string; AIndex: integer): TBitmap;
var
icoHandle: HIcon;
iBitmap: TBitmap;
iIcon: TIcon;
iNumberOfIcons, i: Integer;
begin
Result := nil;
iBitmap := TBitMap.Create;
iIcon := TIcon.Create;
try
// Get the number of Icons
iNumberOfIcons := ExtractIcon (hInstance, PChar (AFilename), UINT (-1));
// Extract the icon frame
icoHandle := ExtractIcon (hInstance, PChar (AFileName), AIndex);
iIcon.Handle := icoHandle;
iBitmap.Width := iIcon.Width;
iBitmap.Height := iIcon.Height;
// Draw the icon on your bitmap
DrawIcon (iBitmap.Canvas.Handle, 0, 0, iIcon.Handle);
Result := iBitmap;
finally
iIcon.Free;
end;
end;
function PixelFormatToBitDepth (APixelFormat: TPixelFormat): integer;
// Convert TPixelFormat to integer
begin
Result := -1;
case APixelFormat of
pf32Bit:
Result := 32;
pf24bit:
Result := 24;
pf8bit:
Result := 8;
pf4Bit:
Result := 4;
pf1bit:
Result := 1;
end;
end;
estoy en el camino correcto? En mis pruebas, ahora obtengo 1 ícono pero la función NumberOfIcons devuelve 1?
editar # 3 De acuerdo con el archivo de ayuda "Si el archivo es un archivo ICO, el valor de retorno de ExtractIcon es 1." Entonces, ¿qué método se puede usar para obtener la cantidad de iconos en el archivo ico?
¿Tiene previsto editarlas posteriormente o simplemente que desean utilizarlos en un programa? En este último caso, es más fácil vincularlos como recursos y usar las API de recursos para obtener la versión correcta del ícono. –
@David ... Estoy tratando de usarlos en un ImageEditor que carga mapas de bits, así que una vez que obtenga el ícono necesito convertirlo a un mapa de bits, y luego obtener su ancho y alto y bitdepth. Estoy intentando usar ExtractIcon para hacer esto basado en el comentario de TLamas. Agregué el código no probado como una edición. – Bill
@Bill, ImageEditor enviado con Delphi? Si es así, intenta olvidarlo. Tengo una buena experiencia, por ej. con IcoFX (también hay una versión portátil) que le permite exportar iconos en varios formatos (incluido * .bmp). Pero no necesita usar solo bitmaps en los archivos de recursos, puede usar cualquier tipo de archivo, solo tiene que compilar los archivos de recursos por su cuenta. – TLama