leute eine frage,
ist es irgendwie möglich eine muster-window-ico-datei nachträglich per code zu duplizieren, während dessen aber die abbilder durch andere zu ersetzen, ohne die api zu verwenden. mir geht folgendes durch den kopf:
ich erstelle einen muster-ico-datei. in dieser sind bereits alle relevanten icon-varianten korrekt abgelegt.
später erstelle ich einen programm in der man einfach per öffnen-dialog eine grafik-datei auswählt, daraus erstelle ich intern dann mehrere kopien in den geforderten größen (für klassische icons 16, 24, 32, 48 und für neuere zusätzlich 128).
auf jeden fall das programm erstellt erst einmal eine kopie der muster-datei im arbeitsspeicher. dabei wird der header als ein memory-block geladen und genauso auch die einzelnen abbilder etc. dann werden die abbilder durch das erwünschte bild im jeweiligen variante ersetzt. danach wird der ganze spaß als neue datei zusammengestzt. voila neues icon ist fertig.
die idee ist zwar simpel, mir fehlen dazu folgende infos. ich werde aus
https://en.wikipedia.org/wiki/BMP_file_format
und
https://docs.microsoft.com/de-de/previo ... v=msdn.10)
nicht ganz schlau.
mir geht es darum die muster-datei beim einlesen richtig zu browsen und die entsprechenden anteile als eigenständige memory-blocks ersteinmal in den speicher zu laden. natürlich das ganze auch weider auf dieselbe art zusammenzusetzen.
hinsichtlich des bitmaps für windows kann ich ja das einfach von pb nutzen. für os/2 müsste ich es aber wohl selbst reprogrammieren. ich bräuchte anhaltspunkte wie ich selbst so einen bitmap-abbild ohne api erzeugen, abspeichern und laden kann. die farben werden ja da mit einer farbpalette gemacht. das müsste ich dann auch selbst regeln.
hat jemand eine idee?
windows icon-format
Re: windows icon-format
Hier ein Beispiel für (PNG) ICO - Dateien.
Code:
Code:
Code: Alles auswählen
EnableExplicit
DeclareModule ICON
;ICO MODULE draft - create a (single) PNG *.ico!
;Author Mijikai
;PureBasic v.5.62 (x64)
Declare.i Create(Image.i)
Declare.i Save(*icon,File.s)
Declare.i Free(*icon)
EndDeclareModule
Module ICON
EnableExplicit
UsePNGImageEncoder()
Structure ICON_DIR
idReserved.u; // Reserved (must be 0)
idType.u ; // Resource Type (1 for icons)
idCount.u ; // How many images?
EndStructure
Structure ICON_DIR_ENTRY
bWidth.a; // Width, in pixels, of the image
bHeight.a; // Height, in pixels, of the image
bColorCount.a; // Number of colors in image (0 if >=8bpp)
bReserved.a ; // Reserved ( must be 0)
wPlanes.u ; // Color Planes
wBitCount.u ; // Bits per pixel
dwBytesInRes.l; // How many bytes in this resource?
dwImageOffset.l; // Where in the file is this image?
EndStructure
Procedure.i Create(Image.i)
Protected Width.i
Protected Height.i
Protected *Offset
Protected *Buffer
Protected BufferSize
Protected *icon.ICON_DIR
Protected *entry.ICON_DIR_ENTRY
If IsImage(Image)
Width = ImageWidth(Image)
Height = ImageHeight(Image)
If Width = Height
If Width = 16 Or Width = 32 Or Width = 48 Or Width = 128
*Buffer = EncodeImage(Image,#PB_ImagePlugin_PNG,#Null,32)
If *Buffer
BufferSize = MemorySize(*Buffer)
*Offset = SizeOf(ICON_DIR) + SizeOf(ICON_DIR_ENTRY)
*icon = AllocateMemory(*Offset + BufferSize)
If *icon
*icon\idType = 1
*icon\idCount = 1
*entry = *icon + SizeOf(ICON_DIR)
*entry\bWidth = Width
*entry\bHeight = Height
*entry\wBitCount = 32
*entry\dwBytesInRes = BufferSize
*entry\dwImageOffset = *Offset
CopyMemory(*Buffer,*icon + *Offset,BufferSize)
FreeMemory(*Buffer)
ProcedureReturn *icon
EndIf
FreeMemory(*Buffer)
EndIf
EndIf
EndIf
EndIf
EndProcedure
Procedure.i Save(*icon,File.s)
Protected Handle.i
Protected Bytes.i
Protected Result.i
If *icon And File
Handle = CreateFile(#PB_Any,File)
If Handle
Bytes = MemorySize(*icon)
Result = Bool(WriteData(Handle,*icon,Bytes) = Bytes)
CloseFile(Handle)
If Not Result
DeleteFile(File)
EndIf
EndIf
EndIf
ProcedureReturn Result
EndProcedure
Procedure.i Free(*icon)
FreeMemory(*icon)
EndProcedure
EndModule
Global icon.i
icon = ICON::Create(LoadImage(#PB_Any,"xyz.bmp"));use image plugins to support other image formats!
If icon
Debug ICON::Save(icon,"test123.ico")
ICON::Free(icon)
EndIf
End
Re: windows icon-format
sieht gut aus, unterstützt wohl ältere windowssysteme nicht.
relevant für mich wäre eigentlich noch windows2000.
ich meine die png-support besteht erst seit windowsxp.
gibt es irgendeine frei lib mit der das geht?
unter mac kann ich das mittels sips machen, aber ich bräuchte eine vergleichbare lösungsansatz für windows und linux.
ich könnte auch damit leben, wenn ich unter windows von mir aus mit der windows api aus bildern gültige windows icons erstellen könnte. bliebe dann noch eine lösung für linux.
imagemagick ist zwar ein super tool, ist aber zu umfangreich und ich kann das nicht einfach so mit meinem programm später ausliefern. außerdem ist die installation so eine sache. vor allem auf mac oder linux bzw. auf älteren systemversionen. ich will lösungen haben, die einfach zu installieren und zu verwenden sind.
relevant für mich wäre eigentlich noch windows2000.
ich meine die png-support besteht erst seit windowsxp.
gibt es irgendeine frei lib mit der das geht?
unter mac kann ich das mittels sips machen, aber ich bräuchte eine vergleichbare lösungsansatz für windows und linux.
ich könnte auch damit leben, wenn ich unter windows von mir aus mit der windows api aus bildern gültige windows icons erstellen könnte. bliebe dann noch eine lösung für linux.
imagemagick ist zwar ein super tool, ist aber zu umfangreich und ich kann das nicht einfach so mit meinem programm später ausliefern. außerdem ist die installation so eine sache. vor allem auf mac oder linux bzw. auf älteren systemversionen. ich will lösungen haben, die einfach zu installieren und zu verwenden sind.
Re: windows icon-format
Bitmaps gehen auch
Wikipedia:
Wikipedia:
Also fast gleich wie bei einem PNG nur das hier der Header entfernt werden muss.An ICO or CUR file is made up of an ICONDIR ("Icon directory") structure, containing an ICONDIRENTRY structure for each image in the file, followed by a contiguous block of all image bitmap data (which may be in either Windows BMP format, excluding the BITMAPFILEHEADER structure, or in PNG format, stored in its entirety).
Re: windows icon-format
bekomme ich so auch das icon so das es wie üblich die größen 16 24 32 und 48 enthält?
ab xp glaub dann auch die 128px
ab xp glaub dann auch die 128px