Aktuelle Zeit: 17.02.2019 01:45

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: windows icon-format
BeitragVerfasst: 24.01.2019 21:35 
Offline

Registriert: 14.12.2015 15:16
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?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: windows icon-format
BeitragVerfasst: 25.01.2019 03:36 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Hier ein Beispiel für (PNG) ICO - Dateien.

Code:
Code:

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: windows icon-format
BeitragVerfasst: 02.02.2019 16:46 
Offline

Registriert: 14.12.2015 15:16
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: windows icon-format
BeitragVerfasst: 02.02.2019 16:54 
Offline
Benutzeravatar

Registriert: 25.09.2016 01:42
Bitmaps gehen auch :)

Wikipedia:
Zitat:
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).


Also fast gleich wie bei einem PNG nur das hier der Header entfernt werden muss.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: windows icon-format
BeitragVerfasst: 03.02.2019 18:51 
Offline

Registriert: 14.12.2015 15:16
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


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye