%FFP /////////////////////////////////////////////////////// // H E A D E R /////////////////////////////////////////////////////// author: "Martijn W. van der Lee (martijn@v-d-l.com)" title: "SnapperGen" dialog: color=x11.silver /////////////////////////////////////////////////////// // C O N T R O L S /////////////////////////////////////////////////////// ctl[CTL_LOGO]: None ctl[ 1]: PushButton,"&Snap" ,size=(40,10),pos=(180,2) ctl[ 2]: Bitmap ,size=(200,83),pos=(180,15) ctl[ 3]: "&Effect",textcolor=x11.black ,size=(100,10),pos=(255,2) ,range=(0,100) ctl[ 4]: "&Width / 4",textcolor=x11.black ,size=(148,10),pos=(206,101) ,range=(1,64),page=4 ,val=8 ctl[ 5]: "&Height / 4",textcolor=x11.black ,size=(148,10),pos=(206,113) ,range=(1,64),page=4 ,val=8 /////////////////////////////////////////////////////// // B U T T O N H A N D L E R /////////////////////////////////////////////////////// onCtl(n): { int ifFileNr; int iLoop; int iSnapWidth = ctl(4) * 4; int iSnapHeight = ctl(5) * 4; // BITMAPFILEHEADER (struct) word bfType = 0x4D42; // "BM" for recognition // (high-endian!) dword bfSize = 54 // filesize! + (iSnapWidth * iSnapHeight * 3); word bfReserved1 = 0; word bfReserved2 = 0; dword bfOffBits = 54; // offset from top to data // BITMAPINFOHEADER (struct) dword biSize = 40; // struct length long biWidth = iSnapWidth; long biHeight = iSnapHeight; word biPlanes = 1; // reserved, must be 1 word biBitCount = 24; // bitdepth dword biCompression = 0; // no compression dword biSizeImage = 0; // only neededif compressed long biXPelsPerMeter = 0; // printing resolution, who cares long biYPelsPerMeter = 0; // printing resolution, who cares dword biClrUsed = 0; // only for paletted modes dword biClrImportant = 0; // only for paletted modes if(ifFileNr = fopen("snap.bmp", "wb")) { // header // BITMAPFILEHEADER fwrite(&bfType,2,1,ifFileNr); fwrite(&bfSize,4,1,ifFileNr); fwrite(&bfReserved1,2,1,ifFileNr); fwrite(&bfReserved2,2,1,ifFileNr); fwrite(&bfOffBits,4,1,ifFileNr); // BITMAPINFOHEADER fwrite(&biSize,4,1,ifFileNr); fwrite(&biWidth,4,1,ifFileNr); fwrite(&biHeight,4,1,ifFileNr); fwrite(&biPlanes,2,1,ifFileNr); fwrite(&biBitCount,2,1,ifFileNr); fwrite(&biCompression,4,1,ifFileNr); // You COULD just fwrite(&biSizeImage,4,1,ifFileNr); // for() 24 0x00's fwrite(&biXPelsPerMeter,4,1,ifFileNr); // here, but let's fwrite(&biYPelsPerMeter,4,1,ifFileNr); // keep it clean fwrite(&biClrUsed,4,1,ifFileNr); // for the sake of fwrite(&biClrImportant,4,1,ifFileNr); // this example. // bitmap data for(y = iSnapHeight - 1; y >= 0; y--) for(x = 0; x < iSnapWidth ; x++) for(z = 2; z >= 0; z--) { fputc(pget((x * xmax) / (iSnapWidth - 1), (y * ymax) / (iSnapHeight - 1), z), ifFileNr); } if(fclose(ifFileNr)) ErrorOk("Can't close snap file."); // Display snap setCtlImage(2,"snap.bmp",0); } else ErrorOk("Failed to create snap."); return(false); } /////////////////////////////////////////////////////// // T I L E H A N D L E R /////////////////////////////////////////////////////// ForEveryTile: { for(x = 0; x < xmax; x++) for(y = 0; y < ymax; y++) for(z = 0; z < zmax; z++) pset(x, y, z, mix(rnd(0, 255), src(x, y, z), ctl(3), 100)); return(true); }