October 28, 2020, 11:08:58 PM

Author Topic: [bb] Image To Icon (UPDATE) by Ked [ 1+ years ago ]  (Read 1480 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bb] Image To Icon (UPDATE) by Ked [ 1+ years ago ]
« on: June 29, 2017, 12:28:43 AM »
Title : Image To Icon (UPDATE)
Author : Ked
Posted : 1+ years ago

Description : This is an updated version of Ford Escort's code which converted a bitmap into an icon with no alpha. This one creates an icon with alpha from a mask image.

Code :
Code: BlitzBasic
  1. Graphics 800,600,32,2
  2. bmp$="test.bmp"
  3. maskfile$="test_mask.bmp"
  4. filename$="test.ico"
  5. saveicon(bmp$,filename$,maskfile$)
  6.  
  7. Function SaveIcon(bmp$,filename$,maskfile$)
  8.         Local buffer=LoadImage(bmp$)
  9.         Local mask=LoadImage(maskfile$)
  10.         If ImageWidth(buffer)<>ImageWidth(mask) Or ImageHeight(buffer)<>ImageHeight(mask) Then
  11.                 RuntimeError "Invalid mask image!"
  12.         EndIf
  13.         Local icon=CreateBank(100000)
  14.         Local offset=0
  15.        
  16.         If buffer
  17.                 ;-------------------------------ICONDIR structure
  18.                 offset=Poke(0,1,icon,offset)                                            ;reserved must be 0                                     (WORD)0
  19.                 offset=Poke(1,1,icon,offset)                                            ;ressource type icon=1                                  (WORD)2
  20.                 offset=Poke(1,1,icon,offset)                                            ;how many images 1                                              (WORD)4
  21.                 ;-------------------------------ICONDIR ENTRY
  22.                 offset=Poke(ImageWidth(buffer),0,icon,offset)      ;width in pixel of the picture                       (BYTE)6
  23.                 offset=Poke(ImageHeight(buffer),0,icon,offset)          ;height in pixel of the picture                 (BYTE)7
  24.                 offset=Poke(0,0,icon,offset)                                            ;#color in image 0 if >8bpp                     (BYTE)8
  25.                 offset=Poke(0,0,icon,offset)                                            ;reserved must be 0                                     (BYTE)9
  26.                 offset=Poke(1,1,icon,offset)                                            ;color planes                                                   (WORD)10
  27.                 offset=Poke(32,1,icon,offset)                                           ;bit per pixel                                                  (WORD)12
  28.                         bytecount=((ImageWidth(buffer)*ImageHeight(buffer))*4);x,y*4 bytes
  29.                 offset=Poke(bytecount+40+(ImageWidth(buffer)*ImageHeight(buffer))/8,2,icon,offset)      ;how many bytes in this ressource               (DWORD)14
  30.                 offset=Poke(offset+4,2,icon,offset)                             ;where in the file is the bitmap data   (DWORD)18
  31.                 ;--------------------------------DIB header
  32.                 offset=Poke(40,2,icon,offset)                                           ;lenght of the header                                   (DWORD)22
  33.                 offset=Poke(ImageWidth(buffer),2,icon,offset)           ;width in pixel of the picture                  (DWORD)26
  34.                 offset=Poke(ImageHeight(buffer)*2,2,icon,offset)                ;width in pixel of the picture          (DWORD)30
  35.                 offset=Poke(1,1,icon,offset)                                            ;color planes 1 in most case                    (WORD)34
  36.                 offset=Poke(32,1,icon,offset)                                           ;bit per pixel                                                  (WORD)36
  37.                 offset=Poke(0,2,icon,offset)                                            ;compression value                                              (DWORD)38
  38.                 offset=Poke(bytecount,2,icon,offset)                            ;pixeldata size                                                 (DWORD)42
  39.                 offset=Poke(0,2,icon,offset)                                            ;ppm                                                                    (DWORD)46
  40.                 offset=Poke(0,2,icon,offset)                                            ;ppm                                                                    (DWORD)50
  41.                 offset=Poke(0,2,icon,offset)                                            ;number of color 0=max                  (DWORD)54
  42.                 offset=Poke(0,2,icon,offset)                                            ;number of color indice importants 0=max(DWORD)58
  43.  
  44.                 For y=ImageHeight(buffer)-1 To 0 Step-1
  45.                 For x=0 To ImageWidth(buffer)-1;To  Step-1
  46.                         SetBuffer ImageBuffer(buffer)
  47.                                 GetColor x,y
  48.                                 red=ColorRed()
  49.                                 green=ColorGreen()
  50.                                 blue=ColorBlue()
  51.                                
  52.                                 offset=Poke(blue,0,icon,offset)
  53.                                 offset=Poke(green,0,icon,offset)
  54.                                 offset=Poke(red,0,icon,offset)
  55.                         SetBuffer ImageBuffer(mask)
  56.                                 GetColor x,y
  57.                                 alpha=ColorRed()
  58.                                
  59.                                 offset=Poke(alpha,0,icon,offset)
  60.                 Next
  61.                 Next
  62.                
  63.                 For a=1 To bytecount/8
  64.                         offset=Poke(0,0,icon,offset)
  65.                 Next
  66.        
  67.         EndIf
  68.        
  69.         fil=WriteFile(filename$)
  70.         WriteBytes(icon,fil,0,offset)
  71.         CloseFile fil
  72. End Function
  73.  
  74. Function Poke(value,typ,bank,offset)
  75.         Select typ
  76.                 Case 0;byte
  77.                         PokeByte bank,offset,value:offset=offset+1
  78.                         Return offset
  79.                 Case 1;word
  80.                         PokeShort bank,offset,value:offset=offset+2
  81.                         Return offset
  82.                 Case 2;long
  83.                         PokeInt bank,offset,value:offset=offset+4
  84.                         Return offset
  85.         End Select
  86. End Function


Comments :


Ked(Posted 1+ years ago)

 I'll create a GUI with this if anyone wants it in executable format.


ford escort(Posted 1+ years ago)

 nice addon to my code:)


 

SimplePortal 2.3.6 © 2008-2014, SimplePortal