Kick Assembler makes it easy to convert graphics from gif and jpg files to the basic C64 formats. A picture can be loaded into a picture value by the LoadPicture function. The picture value can then be accessed by various functions depending on which format you want. The following will place a single color logo in a standard 32x8 char matrix charset placed at $2000.
*=$2000 .var logo = LoadPicture("CML_32x8.gif") .fill $800, logo.getSinglecolorByte((i>>3)&$1f, (i&7) | (i>>8)<<3)
If you don't like the compact form of the .fill command you can use a for loop instead. The following will produce the same data:
*=$2000 .var logo = LoadPicture("CML_32x8.gif") .for (var y=0; y<8; y++) .for (var x=0;x<32; x++) .for(var charPosY=0; charPosY<8; charPosY++) .byte logo.getSinglecolorByte(x,charPosY+y*8)
The LoadPicture can take a color table as the second argument. This is used to decide which bit pattern is produced by a pixel. In single color mode there are two bit patters (%0 and %1) and multi color mode has four (%00, %01, %10 and %11). If you don’t specify a color table, a default table is created based on the colors in the picture. However, normally you wish to control which color is mapped to a bit pattern. The following shows how to convert a picture to a 16x16 multi color char matrix charset:
*=$2800 “Logo” .var picture = LoadPicture("Picture_16x16.gif", List().add($444444, $6c6c6c,$959595,$000000)) .fill $800, picture.getMulticolorByte(i>>7,i&$7f)
The four colors added to the list are the RGB values for the colors that are mapped to each bit pattern.
Finally the picture value contains a getPixel function from which you can get the RGB color of a pixel. This comes in handy when you want to make your own format for some special purpose.
Attributes and functions available on picture values:
Table 12.3. PictureValue Functions
Attribute/Function | Description |
---|---|
width | Returns the width of the picture in pixels. |
height | Returns the height of the picture in pixels. |
getPixel(x,y) | Returns the RGB value of the pixel at position x,y. Both x and y are given in pixels. |
getSinglecolorByte(x,y) | Converts 8 pixels to a single color byte using the color table. X is given as a byte number (= pixel position/8) and y is given in pixels. |
getMulticolorByte(x,y) | Converts 4 pixels to a multi color byte using the color table. X is given as a byte number (= pixel position/8) and y is given in pixels. (NB. This function ignores every second pixel since the C64 multi color format is half the resolution of the single color.) |