displaying a monochrome bitmap file on 128x64 grafical display with KS0107B and KS0108B controller
Bitmap_KS0107.cpp
- Committer:
- Naoto_111
- Date:
- 2014-06-29
- Revision:
- 0:7e8dccadb070
File content as of revision 0:7e8dccadb070:
#include "Bitmap_KS0107.h" Bitmap_KS0107::Bitmap_KS0107(Display *d,int sx,int sy,int w,int h){ start_x=sx; start_y=sy; width=w; height=h; bmp_x=0; bmp_y=0; bmp_data=NULL; disp=d; } void Bitmap_KS0107::setpos(int sx,int sy,int w,int h){ start_x=sx; start_y=sy; width=w; height=h; } void Bitmap_KS0107::read(const char *filename){ FILE *fp; char buf[8]; int offbits; if(bmp_data!=NULL){ for (int i= 0; i<bmp_y/8; ++i)delete[] bmp_data[i]; delete[] bmp_data; } if((fp = fopen(filename, "rb")) == NULL); fseek(fp, 10, SEEK_SET); fread(&offbits,4,1,fp); fseek(fp,18, SEEK_SET); fread(&bmp_x,4,1,fp); fseek(fp, 22, SEEK_SET); fread(&bmp_y,4,1,fp); if((bmp_x%4)!=0)bmp_x=((bmp_x/32)+1)*32; if((bmp_y%8)!=0)bmp_y=(bmp_y/8)*8; bmp_data= new char*[bmp_y/8]; for (int i= 0; i<bmp_y/8; ++i)bmp_data[i]= new char[bmp_x]; for(int i=0;i<bmp_y/8;i++)for(int j=0;j<bmp_x;j++)bmp_data[i][j]=0; for(int y=0; y<bmp_y/8; y++)for(int x=0; x<bmp_x/8; x++) { for(int y_buf=0; y_buf<8; y_buf++) { fseek(fp,offbits+(bmp_x/8)*(bmp_y-1)-(bmp_x/8)*y*8-(bmp_x/8)*y_buf+x,SEEK_SET); fread(&buf[y_buf],1,1,fp); } int i,j,bit,add; for(bit=1,i=0; i<8; i++,bit=bit<<1)for(add=1, j=0; j<8; j++,add=add<<1)if(buf[j]&bit)bmp_data[y][x*8+7-i]+=add; }; fclose(fp); } void Bitmap_KS0107::print(){ for(int row=start_x; row<width+start_x; row++)for(int line=start_y/8; line<height/8+start_y/8; line++)disp->write(line,row,bmp_data[line][row]); } /* void Bitmap_KS0107::print_zoom(int rate){ //unimplemented } */