|
5#

楼主 |
发表于 2010-8-15 21:48:16
|
只看该作者
回复 4# chenhaifeichina
#define DATA_OFFSET 54
alt_u8 header[54] = {
0x42, // identity : B
0x4d, // identity : M
0, 0, 0, 0, // file size
0, 0, // reserved1
0, 0, // reserved2
54, 0, 0, 0, // RGB data offset
40, 0, 0, 0, // struct BITMAPINFOHEADER size
0, 0, 0, 0, // bmp width
0, 0, 0, 0, // bmp height
1, 0, // planes
24, 0, // bit per pixel
0, 0, 0, 0, // compression
0, 0, 0, 0, // data size
0, 0, 0, 0, // h resolution
0, 0, 0, 0, // v resolution
0, 0, 0, 0, // used colors
0, 0, 0, 0 // important colors
};
alt_u16 WIDTH =480;
alt_u16 HEIGHT =340;
int main()
{
int i, j,q;
unsigned char image[489600]; // image array 800 * 400 * 3 = 960000
alt_u16 size; // file size
alt_u16 read_data1;
alt_u8 r, g, b;
FATFS fs;
FIL file; //file objects//
UINT bw; //File R/W count//
static void delay(int n)
{
int i ;
for(i=0;i<n;i++);
}
IOWR_ALTERA_AVALON_PIO_DATA(CLOCK_BASE,0);
for(j = 0; j < HEIGHT; j++) {
for(i = 0; i < WIDTH; i++) {
IOWR_ALTERA_AVALON_PIO_DATA(CLOCK_BASE,1);
delay(50);
IOWR_ALTERA_AVALON_PIO_DATA(CLOCK_BASE,0);
delay(3);
read_data1= IORD_ALTERA_AVALON_PIO_DATA(DATA_A_BASE);
r = ((read_data1 & 0xf800) >>8);
g = ((read_data1 & 0x07e0) >>2);
b = ((read_data1 & 0x001f) <<3);
*(image + 3 * (WIDTH * j + i) + 0) = b; // B
*(image + 3 * (WIDTH * j + i) + 1) = g; // G
*(image + 3 * (WIDTH * j + i) + 2) = r; // R
}
}
// file size
size = WIDTH * HEIGHT * 3 + DATA_OFFSET;
header[2] = (alt_u8)(size & 0x000000ff);
header[3] = (size >> 8 ) & 0x000000ff;
header[4] = (size >> 16) & 0x000000ff;
header[5] = (size >> 24) & 0x000000ff;
// width
header[18] = WIDTH & 0x000000ff;
header[19] = (WIDTH >> 8 ) & 0x000000ff;
header[20] = (WIDTH >> 16) & 0x000000ff;
header[21] = (WIDTH >> 24) & 0x000000ff;
// height
header[22] = HEIGHT & 0x000000ff;
header[23] = (HEIGHT >> 8 ) & 0x000000ff;
header[24] = (HEIGHT >> 16) & 0x000000ff;
header[25] = (HEIGHT >> 24) & 0x000000ff;
}
这个就是16位rgb打包为bmp代码,高手的进来都指导指导下啊。 |
|