Karoshi MSX Community

Desarrollo MSX => Rutinas - Snipets => Mensaje iniciado por: pitpan en 12 de Octubre de 2010, 01:33:01 pm



Título: Quick'n'Dirty GIMP BMP -> MSX (sc5, sc6)
Publicado por: pitpan en 12 de Octubre de 2010, 01:33:01 pm
Please read this first:

- This tiny program does not implement full BMP format
- It will only work in BMP files saved by GIMP program with 16 colours and no RLE compression
- The resulting PAL and PAT files are the palette and pattern raw data in MSX format, but they have no heading
- Compile using GCC: gcc bmp2msx.c -obmp2msx
- Probably it will work also in Windows/Mac with GIMP files, but it hasn't been tested
- This code is pure crap, I know it, so don't bother to comment it aloud ;)

Código:
// BMP -> raw SCREEN 5/6 converter (palette and pattern files)
// Eduardo Robsy Petrus, 2010
// v.0.1
// Use with GIMP BMP files with 16 colours and no RLE compression
// Make sure that the image has even pixel width

#include<stdio.h>

FILE *input,*output;
int i,j,x,y,k;
unsigned char buffer[1024*128];

int main(int argc, char *argv[])

{

// Print tool name
 printf("BMP2MSX v.0.1 - converts GIMP 16-colour BMP to MSX Screen 5/6\n");

// Check if there is a filename parameter
 if (argc!=2)
 {
// If not, print brief instructions
  printf("Usage: bmp2msx [file.bmp]\n");
  return 0;
 }

// Try to open the file
 if ((input=fopen(argv[1],"r"))==NULL)
 {
  printf("Cannot open %s\n",argv[1]);
  return 1;
 }

// Read all file to buffer
 for (i=0;!feof(input);buffer[i++]=fgetc(input));
 i--;
 fclose(input);

// Create palette file
 output=fopen("output.pal","w");
 for (i=0;i<16;i++)
 {
  j=((buffer[0x35+i*4+3]/32)*16)+(buffer[0x35+i*4+1]/32);
  fputc(j,output);
  j=buffer[0x35+i*4+2]/32;
  fputc(j,output);
 }
 fclose(output);

// Create pattern file
 output=fopen("output.pat","w");
 x=(buffer[0x12]+buffer[0x13]*256)/2;
 y=buffer[0x16]+buffer[0x17]*256;
 printf("%i x %i pixels\n",x,y);

 for (j=y-1;j>=0;j--)
 for (i=0;i<x;i++)
 {
  k=buffer[buffer[2]+j*x+i];
  fputc(k,output);
 }
 fclose(output);

 return;

}

A very easy process to convert images:

- Open/Edit the image in GIMP
- Convert to indexed image (image > mode > indexed), set 16 as maximum colours and enable dithering if you need it
- Save as BMP file with no RLE compression
- Use the provided command-line tool to convert it easily
- Generate the required code to render the image back in MSX!