UnderwareDESIGN

PlayBASIC => Resources => Source Codes => Topic started by: kevin on February 01, 2008, 11:26:38 AM

Title: Storing Images in data statements
Post by: kevin on February 01, 2008, 11:26:38 AM
Storing Images in data statements

   This example demonstrates a very simple approach for storing Image media within your program as data statements.   The example comes with a decoder function and a little  Space Invader sprite set.  The sprites were made by Phaelax.



Related articles:

   * Resource Binding in PlayBASIC V1.64O (http://www.underwaredesign.com/forums/index.php?topic=3988.0)  (bind media into your EXEs. much better than the data option!)




Title: Re: Storing Images in data statements
Post by: kevin on April 02, 2015, 10:53:22 PM
  Load Palette Mapped Image From Data Statements

    This is an alternative way of loading image data from internal data statements.  The first example is the usage example and includes a converted image as an example.      

[pbcode]

; PROJECT : Load Palette Mapped Image From Data Statements
; AUTHOR  : PlayBASIC Tutor
; CREATED : 4/3/2015
; EDITED  : 4/3/2015
; ---------------------------------------------------------------------

      ThisImage=LoadDataStatementImage("fluppi.bmp")

      drawimage THisIMage,100,100,false

      SYnc
      waitkey
      

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
// --------------[ LOAD (PALETTE MAPPED) DATA STATEMENT IMAGE ]---------------
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
   

Function LoadDataStatementImage(Filename$)

      Index=FindData(Filename$)
      if Index>-1   
         olddatapos=getdatapointer()

         restore index+1

         width         =Readdata()
         height      =Readdata()
         palettesize   =Readdata()

         Dim Palette(PaletteSize)
         For lp=0 to PaletteSize-1
               Palette(lp)=readdata()
         next

         ThisImage=newimage(Width,Height,2)

         oldsurface=getsurface()
         rendertoimage THisIMage
         lockbuffer
            ThisRGb=Point(0,0)
            For ylp=0 to height-1
               For xlp=0 to width-1
                     fastDot xlp,ylp,Palette(ReadData())
               next
            next
         unlockbuffer

         rendertoimage oldsurface      
         restore OldDataPos
      endif

EndFUnction ThisImage





// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
// --------[ fluppi.bmp IMAGE LOAD Converted to DATA STATEMENTS ]------------
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------

Data "fluppi.bmp"
Data 58
Data 46
Data 134
Data 0,12422966,15198251,15396144,15578669,15623243,15657264,15689291,15710254,15754827,15776046,15776302,15789359,15842093,15908651,15951435,15951691,15973421,16016715,16082763,16119717,16148555,16148556,16170797,16171053,16171309,16171564,16182565,16213579,16314149,16345419,16367916
Data 16368172,16368940,16379173,16380194,16380195,16380196,16380197,16380199,16380200,16380452,16381481,16382952,16383287,16383606,16383787,16383789,16383790,16383798,16433964,16434731,16444965,16445988,16446244,16447478,16447527,16447531,16447990,16448503,16448724,16448739,16448745,16448747
Data 16448750,16448754,16448760,16448949,16448978,16448987,16449328,16449334,16499756,16511780,16512035,16512036,16514282,16514283,16514291,16514297,16514524,16514798,16514861,16565548,16577827,16578851,16580060,16580088,16580089,16580331,16580385,16580388,16580395,16580396,16580465,16580534
Data 16580592,16645369,16645882,16645883,16646138,16646139,16709411,16710966,16711409,16711675,16738891,16739659,16756425,16764203,16774947,16775202,16775970,16776225,16776226,16776230,16776482,16776700,16776993,16776994,16777002,16777003,16777004,16777012,16777013,16777178,16777179,16777201
Data 16777204,16777207,16777210,16777212,16777214,16777215
Data 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,108,108,108,108,108,108,108,108,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,108,108,108,108,108,108,108,108,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,0,0,0,0,0,0,0,122,47,47,47,47,93,122,121,0,0,0,0,133,105,105,105,133,0,0,0,0,108,108,108,108,108,108,108,108,108,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,108,108,108,108,0,0,0,0,0,0,0,0,0,103,44,44,44,71,0,0,0,0,0,0,0,133,100,100,100,133,0,0,0,0,0,0,0,108,108,108,108,108,108,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,108,108,108,0,0,0,0,0,0,70,70,70,57,40,40,40,40,115,0,0,0,0,0,0,0,100,100,100,100,100,105,131,133,0,0,0,0,108,108,108,108,108,108,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,108,108,108,0,0,0,0,120,122,82,47,48,56,35,36,36,36,113,0,0,0,0,133,131,105,100,100,100,100,100,132,133,133,0,0,0,0,108,108,108,108,108,108,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,0,0,0,0,0,0,0,0,37,37,37,37,37,42,36,37,37,37,114,0,0,0,0,133,88,98,105,100,100,100,105,0,0,0,0,0,0,0,0,0,0,108,108,108,108,108,108,108,108
Data 108,108,108,108,108,108,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39,38,37,37,37,37,114,0,0,0,0,117,133,58,105,100,100,100,133,0,0,0,0,133,133,0,0,0,0,108,108,108,108,108,108,108,108
Data 108,108,108,108,108,108,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,111,74,37,37,37,37,114,0,0,0,0,133,133,58,105,100,100,100,133,0,0,0,0,133,133,0,0,0,0,108,108,108,108,108,108,108,108
Data 108,108,108,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,37,37,114,0,0,0,0,133,133,133,133,100,100,100,133,0,0,0,0,133,133,0,0,0,0,108,108,108,108,108,108,108,108
Data 108,108,108,108,0,0,0,0,0,43,43,43,43,43,43,43,43,43,104,0,0,0,0,0,37,37,37,114,0,0,0,0,133,133,133,133,100,100,100,133,0,0,0,0,133,133,0,0,0,0,108,108,108,108,108,108,108,108
Data 108,108,108,108,0,0,0,0,0,89,89,89,89,89,89,89,89,89,128,0,0,0,0,0,102,73,37,116,0,0,0,0,133,55,97,133,133,105,100,133,0,0,0,0,133,133,0,0,0,0,108,108,108,108,108,108,108,108
Data 108,108,108,108,0,0,0,0,127,62,62,62,62,62,62,62,62,62,127,0,0,0,0,0,0,0,54,112,0,0,0,0,0,0,0,133,133,100,105,133,0,0,0,0,133,133,0,0,0,0,108,108,108,108,108,108,108,108
Data 108,108,108,108,0,0,0,0,127,62,62,62,62,62,62,62,62,62,76,0,0,0,0,0,0,0,114,53,29,27,85,0,0,0,0,117,133,133,133,101,88,59,59,87,101,133,0,0,0,0,108,108,108,108,108,108,108,108
Data 108,108,108,108,0,0,0,0,129,64,63,62,62,62,62,62,62,62,62,81,96,130,0,0,0,0,37,37,54,75,119,0,0,0,0,133,133,99,133,133,133,133,133,133,133,133,0,0,0,0,108,108,108,108,108,108,108,108
Data 108,108,108,108,0,0,0,0,125,68,61,63,62,62,62,62,62,62,77,69,68,126,0,0,0,0,37,37,37,37,114,0,0,0,0,0,0,133,133,133,133,133,133,133,133,133,0,0,0,0,108,108,108,108,108,108,108,108
Data 108,108,108,108,0,0,0,0,123,48,67,65,62,62,62,62,62,62,78,45,46,123,0,0,0,0,114,37,37,37,53,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,108,108,108,108
Data 108,108,108,108,0,0,0,0,120,91,95,66,64,64,64,64,64,64,79,94,90,120,0,0,0,0,116,37,37,37,37,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,108,108,108,108
Data 108,108,108,108,0,0,0,0,6,2,20,80,60,60,60,60,60,60,86,0,0,0,0,0,0,0,112,37,37,37,54,37,37,37,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,108
Data 108,108,108,108,0,0,0,0,0,0,0,124,49,49,49,49,49,49,124,0,0,0,0,0,0,0,53,37,0,0,0,0,0,0,0,0,0,0,0,28,28,28,28,28,28,28,28,28,28,28,28,30,0,0,0,0,108,108
Data 108,108,108,108,108,0,0,0,0,0,0,120,92,92,92,92,92,92,120,0,0,0,0,118,84,54,41,41,0,0,0,0,0,0,0,107,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,107,0,0,0,0,108,108
Data 108,108,108,108,108,0,0,0,0,0,0,12,3,3,3,3,3,0,0,0,0,0,0,110,34,34,34,52,0,0,0,0,0,0,0,7,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,9,0,108,108,108,108,108
Data 108,108,108,108,108,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,11,25,51,33,33,32,109,0,0,0,0,22,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,0,0,0,0,0,0,0,0,0,0,32,32,50,31,32,32,32,32,0,0,0,0,107,107,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,0,0,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,0,0,0,0,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,0,0,0,1,24,10,10,10,8,23,32,32,32,32,32,32,32,32,32,32,32,0,0,0,0,19,18,18,18,18,18,18,18,18,18,18,18,18,21,0,0,0,0,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,0,0,0,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,72,83,32,0,0,0,0,107,106,106,106,106,106,106,106,106,106,106,106,106,107,0,0,0,0,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,0,0,0,0,24,10,10,10,8,23,50,32,32,32,32,32,32,32,32,32,32,0,0,0,0,19,18,18,18,18,18,18,18,18,18,18,18,18,21,0,0,0,0,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,0,0,0,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,32,32,32,17,4,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,108,108,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,108,108,108,0,0,0,0,0,0,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,108,108,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,108,108,108,0,0,0,0,0,0,0,26,13,13,13,13,13,13,13,13,13,13,32,32,32,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,108,108,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,0,0,0,0,0,0,0,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108
Data 108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108


[/pbcode]



     Conversion Code

       This example uses the Palette mapping library to palette map the input image, then  dumps the data out to data statements.   You could use this same principal  to make your own custom image format to protect your media if you really wanted.  Of course to do that you'd be dumping the pixel information out to file instead of data statements

[pbcode]
   // Include the palette Mapping library
   #include "PaletteMapping"
   

   Filename$="img/fluppi.bmp"

   Convert_Image_File_To_Data_Statements(Filename$)

   Sync
   waitkey
   
   end
   
Function Convert_Image_File_To_Data_Statements(Filename$)


   // Define a palette big enough to hold 2^16 colours   
   Dim Palette($10000)

   // Give palette mapping library address of the palette
   // we're using.     
   SetPalette(Palette())
   
   // Set Colour Index zero to rgb(0,0,0) BLACK
   Palette(0)   = rgb(0,0,0)

   // This number of colours currently in our palette
   ColourCount=1


   oldsurface=getsurface()
   

   // Load the Ship image from the media folder to folders down
   ShipImage=LoadNewFXIMage(Filename$)

   // Convert the images normally RGB formated pixels into our
   // current palette
   ColourCount=PaletteMapRGBImage(ShipImage,Palette(), ColourCount)
   
   rendertoimage shipimage
   lockbuffer
   THisRGB=point(0,0)

   #print " Data "+chr$(34)+getfilename$(Filename$)+chr$(34)
   #print " Data "+str$(getimagewidth(ShipIMage))
   #print " Data "+str$(getimageheight(ShipIMage))
   #print " Data "+str$(ColourCount)

   row$=""
   RowCount=0
   for lp=0 to colourcount-1
   
      Row$+=str$(Palette(lp))
      RowCount++
      if RowCount=32
         #print " Data "+row$
         RowCount=0
         Row$=""
      else
         Row$+=","      
      endif         
   next

   if RowCount
         #print " Data "+trimright$(row$,",")
   endif
   
   for ylp=0 to getimageheight(ShipIMage)-1
      Row$=" Data "
      for xlp=0 to getimagewidth(ShipIMage)-1
               // Read the Colour Index from the palette mapped screen directly
               ColourIndex= PaletteMappedPoint(xlp,ylp)
               Row$+=str$(ColourIndex)+","               
      next
      #print trimright$(row$,",")
   next
   unlockbuffer
   rendertoimage oldsurface

EndFUnction
   
[/pbcode]






Title: Re: Storing Images in data statements
Post by: kevin on April 14, 2015, 02:26:10 AM
  Load Compressed 8bit Palette Mapped Images from Data Statements


     This is another variation of the previous example code above, the main difference being that the colour table from palette mapped image is run length compressed before being output.    The packer library only supports compressing bytes, so if the colour table exceeds 256 (2^8) colours then it stores the data raw..


[pbcode]

     ThisImage=LoadDataStatementImage("rock.bmp")

      cls 255

     drawimage THisIMage,100,100,false
      
     SYnc
     waitkey
     



      #include "packer"

// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
// -------[ LOAD (COMPRESSED PALETTE MAPPED) DATA STATEMENT IMAGE ]-----------
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
   

Function LoadDataStatementImage(Filename$)

     Index=FindData(Filename$)
     if Index>-1  
        olddatapos=getdatapointer()

        restore index+1

        width         =Readdata()
        height      =Readdata()
        palettesize   =Readdata()

        Dim Palette(PaletteSize)
        For lp=0 to PaletteSize-1
              Palette(lp)=readdata()
        next

        ThisImage=newimage(Width,Height,2)


        oldsurface=getsurface()
        rendertoimage THisIMage
        lockbuffer
           ThisRGb=Point(0,0)

            if PaletteSize<256
         

                packedsize  =Readdata()
                unpackedsize  =(width*Height)+256
               
                SrcBank=newBank(unpackedsize)
                DestBank=newBank(unpackedsize)
                  
                for address=0 to   packedsize-1 step 4
                         PokeBankInt SrcBank,Address, readdata()
                next

               // depack the bytes
               if DepackBytes(getbankptr(SrcBank),GetBankPtr(DestBank))=1
                  Address=0   
                  // colour the colours out
                  For ylp=0 to height-1
                     For xlp=0 to width-1
                           fastDot xlp,ylp,Palette(PeekBankByte(DestBank,Address))
                           Address++
                     next
                  next
               endif

               DeleteBank SrcBank
               DeleteBank DestBank

         
            else
         
               // the image has more than 256 colours, so store it RAW
               For ylp=0 to height-1
                 For xlp=0 to width-1
                       fastDot xlp,ylp,Palette(ReadData())
                 next
              next
     
           endif
     
        unlockbuffer

        rendertoimage oldsurface      
        restore OldDataPos
     endif

EndFUnction ThisImage





// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
// --------[ ROCK.bmp IMAGE Converted to DATA STATEMENTS ]------------
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------

Data "rock.bmp"
Data 80,80,9
Data 0,8,2097152,4194304,8396800,10502144,12607488,14721024,14737632
Data 2348
data $6B504250,$190000,$40000,$1D0003,$6030581,$4050582,$3E050700,$6058200,$6840704,$9000005,$83003C05,$5060605,$C068107,$84003A05,$6060505,$6810706,$39050B,$6030503,$6820706,$82040505,$6050505,$5050035,$7060603,$3050682,$5058404,$7030606,$310604,$6810508,$6840707,$3050405,$4070606,$5002E06
data $81060405,$84070805,$6060506,$603070A,$503002C,$5060682,$8068107,$6068307,$3070C05,$84002A06,$6060505,$6830710,$70B0506,$280605,$6060583,$603070F,$7090503,$5060684,$26060405,$6068200,$606070C,$6810505,$6820706,$4050506,$81002406,$81070706,$B070605,$7038105,$50604,$4810503,$4810021,$8810708
data $6030706,$2820508,$3820003,$5040303,$5030005,$20030482,$E048100,$7060507,$2018505,$3060303,$4038207,$6820504,$82050306,$200304,$70E0481,$5070605,$2010184,$83070506,$6040306,$3048305,$85001D03,$4060605,$81070C06,$83050C06,$7060403,$3068307,$81050604,$89001D03,$7070605,$6050504,$83070906,$3040506
data $6048105,$6048205,$6820709,$1C050703,$6058500,$5070706,$5058204,$7860604,$5050607,$81050304,$81050604,$81070B04,$1A050806,$5058700,$7070606,$82040803,$6030505,$B050582,$C038104,$19050807,$3050300,$3078306,$81040E03,$84040803,$5040303,$404070B,$5050582,$5001506,$1060305,$382040D,$4040503,$5820003
data $3070906,$5058404,$7030606,$110604,$6810508,$4050304,$3040386,$4040304,$3060003,$81000581,$84060805,$5040505,$7060603,$E0604,$6040505,$3060581,$6010481,$4030804,$3038304,$85050804,$6050604,$3070A06,$3000C06,$6068205,$6820705,$81030707,$C060705,$5068207,$84050700,$5060604,$603070C,$584000A
data $A060605,$82030507,$7140605,$50682,$4810505,$5810603,$605070B,$5830008,$70D0606,$6068201,$682070F,$82070506,$3000506,$6048305,$9050307,$6068407,$6040505,$6820006,$4070C06,$5038406,$70F0606,$6060682,$5058207,$6830404,$5030707,$7060681,$5060682,$4060405,$7068100,$6058107,$4050507,$82070E06
data $7060808,$50582,$3060582,$81050307,$6040703,$5030005,$4000483,$8810708,$6030706,$6060581,$6830714,$81000505,$3060405,$3028205,$3038200,$5050403,$83050300,$E040304,$81060307,$13060805,$5068307,$5080005,$3020185,$7030603,$4040382,$6068205,$4830503,$70E0403,$711060D,$5040681,$5080481,$2010184
data $83070506,$6040306,$3048505,$C060403,$4068107,$10060A05,$4068107,$5070005,$6040383,$6830707,$5050403,$30488,$6050504,$83070906,$4040506,$82060705,$70F0605,$6000506,$6048205,$6830709,$5030403,$38200,$5820405,$88060405,$5060707,$4050405,$6030504,$82000581,$70D0605,$5060681,$81050600,$82070B04
data $4040606,$30384,$82040803,$6030505,$4050582,$5050504,$6058204,$681070C,$4820506,$3050303,$D038104,$3068107,$38504,$E030300,$5038104,$5058204,$5820407,$81070A06,$89050806,$5050403,$4030304,$81070C05,$83040306,$1000003,$382040D,$82040E03,$7090606,$5080681,$5040384,$82000105,$7090605,$4040681
data $00383,$4050304,$3040386,$A040304,$82040903,$6040505,$6070783,$4840509,$1050403,$81000581,$81060805,$83040505,$6000003,$1048103,$3830406,$6050503,$40D0581,$3050582,$82050906,$4060304,$4030383,$4820508,$83040405,$7000003,$3038302,$83050504,$5050104,$5058206,$6810410,$4830509,$4050103,$1020384
data $84030802,$3040302,$3028100,$81020500,$5080003,$5030605,$3820409,$8040603,$3048505,$4030101,$2038404,$20A0102,$3040385,$60203,$30282,$6050508,$4090504,$6030382,$83050604,$3030403,$4038101,$3038104,$A018102,$3038102,$82000502,$40B0302,$5050604,$5820409,$9040605,$3048505,$3030301,$3038104
data $1018202,$5020D,$40C0381,$5060603,$5060411,$5810603,$3038200,$4038100,$6010902,$81000502,$81040303,$82040803,$5070606,$5050411,$5810605,$2050100,$281010E,$3810005,$5810403,$6810408,$4110508,$6050504,$5060585,$2070104,$2060181,$2810107,$3810005,$582040A,$11050904,$7050404,$5058306,$87020601
data $3020101,$7020203,$6028101,$9038100,$4058304,$83041A03,$9040505,$4038206,$10103,$1840304,$4030301,$82000702,$4070303,$3040584,$82041A03,$60B0405,$1040381,$1850307,$3020201,$80203,$1040701,$60C041C,$283010F,$90203,$41B030D,$60C0381,$283010E,$A0203,$407030D,$4040381,$4060308,$5040383
data $10D060B,$3030283,$30C000C,$3010405,$4030A04,$3038204,$A058100,$83010C06,$D030302,$2028200,$403030A,$81000305,$8040303,$81010003,$5810005,$5820608,$81010A02,$D0102,$2010185,$4000302,$4028203,$4820307,$8040503,$83040503,$8040303,$3048205,$E01020A,$83010400,$30202,$2090381,$4030383,$4820505
data $81020601,$84040303,$2010203,$2820308,$83030A04,$E030304,$5028100,$2028301,$81020303,$81020501,$5070003,$4010382,$4038102,$2038404,$2090102,$7040382,$3820003,$5001003,$82010A02,$9000302,$1038505,$5030202,$3038104,$8018102,$82040A02,$120303,$81010281,$84010602,$3020103,$183040D,$4060302,$2030381
data $7010182,$3040302,$82040305,$140303,$5010281,$E030402,$2028304,$81040503,$9020403,$5050001,$3030483,$2810016,$1040301,$3030282,$A038104,$1028304,$5030502,$9010902,$82001803,$4050302,$20384,$81040303,$83040905,$B010203,$6018102,$81010702,$7001C02,$08302,$87040A03,$3030405,$9010102,$1018702
data $2030302,$81010702,$81002602,$82040903,$3040405,$3010184,$1010403,$84030400,$3030101,$270204,$7030382,$4058404,$1050303,$7010401,$1018503,$3030202,$1002802,$17010407,$3028301,$D002902,$83011603,$2A020302,$5030D00,$2028201,$283010E,$2C0303,$104030C,$10C0204,$3030283,$282002D,$3030A02,$2028601
data $2020303,$281010A,$85002D01,$2020101,$3040003,$3030282,$A030502,$2E0102,$2830104,$81000302,$5020503,$A048103,$3048303,$81002E03,$83010502,$4030202,$5018102,$3048303,$30704,$30030382,$7020500,$84020301,$3040303,$382040A,$81003203,$2810102,$83010106,$4030302,$3050304,$3038204,$2810034,$1020501
data $30281,$5000381,$3048305,$81003603,$4030102,$5028101,$38030900,$3028200,$3820405,$7004802,$80002F02

[/pbcode]



 Compression Code

 This function creates the compressed data statement code to the console, so you'll need to run the program in a debug mode. F6/F7

[pbcode]
 // Include the palette Mapping library
  #include "PaletteMapping"
  #include "packer"
 

  Filename$=path$+"rock.bmp"

  Convert_Image_File_To_Data_Statements(Filename$)

  Sync
  waitkey
 
  end
 
Function Convert_Image_File_To_Data_Statements(Filename$)


  // Define a palette big enough to hold 2^16 colours  
  Dim Palette($10000)

  // Give palette mapping library address of the palette
  // we're using.    
  SetPalette(Palette())
 
  // Set Colour Index zero to rgb(0,0,0) BLACK
  Palette(0)   = rgb(0,0,0)

  // This number of colours currently in our palette
  ColourCount=1


  oldsurface=getsurface()
 

  // Load the Ship image from the media folder to folders down
  ShipImage=LoadNewFXIMage(Filename$)

  // Convert the images normally RGB formated pixels into our
  // current palette
  ColourCount=PaletteMapRGBImage(ShipImage,Palette(), ColourCount)
 
  rendertoimage shipimage
  lockbuffer
  THisRGB=point(0,0)

   Width=getimagewidth(ShipIMage)
   Height=getimageHeight(ShipIMage)

  #print " Data "+chr$(34)+getfilename$(Filename$)+chr$(34)
  #print " Data "+str$(Width)+","+str$(Height)+","+str$(ColourCount)

  row$=""
  RowCount=0
  for lp=0 to colourcount-1
 
     Row$+=str$(Palette(lp))
     RowCount++
     if RowCount=32
        #print " Data "+row$
        RowCount=0
        Row$=""
     else
        Row$+=","      
     endif        

  next

  if RowCount
           #print " Data "+trimright$(row$,",")
   endif

 
   if ColourCount<256

         // 8 bit palette mapped image, so we compress it
         SrcBank   =NewBank((Width*Height)+256)
         DestBank   =NewBank((Width*Height)+256)
         

         // copy the colour indexes to the abank
         address=0
           for ylp=0 to Height-1
             for xlp=0 to Width-1
                   // Read the Colour Index from the palette mapped screen directly
                 ColourIndex= PaletteMappedPoint(xlp,ylp)
                 pokebankbyte srcbank,address,ColourINdex
                 address++
           next
         next
                  
         PackedSize=Packbytes(GetBankPtr(SrcBank),Address,GetBankpTr(DestBank))
         #print " Data "+str$(packedsize)
        
         RowCount=0         
        Row$=""

         for address=0 to (packedsize-1) step 4

               ThisINt=PeekBankInt(DestBank,Address)
               Row$+=hex$(Thisint)+","
               RowCount++         
               if RowCount=>32
                     row$=trimright$(row$,",")
                     row$=replace$(row$,"$00","$")
                     row$=replace$(row$,"$0","$")
                     #print " data "+row$
                     row$=""
                     RowCount=0         
               endif       

         next

         if rowcount
                     row$=trimright$(row$,",")
                     row$=replace$(row$,"$00","$")
                     row$=replace$(row$,"$0","$")
                     #print " data "+row$
         endif      

         DeleteBank SrcBank
         DeleteBank  DestBank
   
   else
   
        for ylp=0 to Height-1
              Row$=" Data "
              for xlp=0 to Width-1
                   // Read the Colour Index from the palette mapped screen directly
                 ColourIndex= PaletteMappedPoint(xlp,ylp)
                 Row$+=str$(ColourIndex)+","              
           next
         #print trimright$(row$,",")
      next
 
 endif
 
  unlockbuffer
  rendertoimage oldsurface

EndFUnction
 
[/pbcode]