Ooops
November 24, 2020, 06:34:34 AM

Author Topic: [bb] image to icon by ford escort [ 1+ years ago ]  (Read 846 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
[bb] image to icon by ford escort [ 1+ years ago ]
« on: June 29, 2017, 12:28:38 AM »
Title : image to icon
Author : ford escort
Posted : 1+ years ago

Description : convert a picture in ico format

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


Comments :


Raul(Posted 1+ years ago)

 Excellent ! :D


CyBeRGoth(Posted 1+ years ago)

 Nice!Very handy


Pineapple(Posted 1+ years ago)

 Really good.. me like's!!! :D


churchaxe(Posted 1+ years ago)

 I'm getting an "offset out of range" runtime error in the pokebyte... line (function poke) when using one of my .bmp files :(


Jeppe Nielsen(Posted 1+ years ago)

 Nice work, you should update it, so it supports alpha values aswell.


n8r2k(Posted 1+ years ago)

 this is sweet


xlsior(Posted 1+ years ago)

 Another quick-and-very-dirty method is simply take a properly sized .bmp and rename it .ico, Windows can use those as icons as well.(although this won't support the multi-resolution stuff that a real .ico can contain)


Gladclef - Ben B(Posted 1+ years ago)

 Awesome!!!


 

SimplePortal 2.3.6 © 2008-2014, SimplePortal