|

楼主 |
发表于 2018-4-12 15:27:39
|
显示全部楼层
- uint8_t Screen_shot(uint16_t x, uint16_t y, uint16_t width, uint16_t height, char *filename, FUNC prog)
- {
- long file_size;
- long data_size;
- unsigned char widthAlignBytes;uint16_t Vpix[240];
- int i;
- FIL bmpfsrc;
- unsigned int mybw;
-
- uint16_t j;
- // 文件头
- unsigned char header[66] =
- {
- // BITMAPFILEINFO
- 'B', 'M', // [0-1] bfType:必须是BM字符
- 0, 0, 0, 0, // [2-5] bfSize:总文件大小
- 0, 0, 0, 0, // [6-9] brReserved1,bfReserved2:保留
- sizeof(header), 0, 0, 0,// [10-13] bfOffBits:到图像数据的偏移
- // BITMAPFILEHEADER
- 0x28, 0, 0, 0, // [14-17] biSize:BITMAPINFOHEADER大小40字节
- 0, 0, 0, 0, // [18-21] biWidth:图片宽度
- 0, 0, 0, 0, // [22-25] biHeight:图片高度
- 0x01, 0, // [26-27] biPlanes:必须为1
- 0x10, 0, // [28-29] biBitCount:16位
- 0x03, 0, 0, 0, // [30-33] biCompression:BI_BITFIELDS=3
- 0, 0, 0, 0, // [34-37] biSizeImage:图片大小
- 0x12, 0x0B, 0, 0, // [38-41] biXPelsPerMeter:单位长度内的像素数
- 0x12, 0x0B, 0, 0, // [42-45] biYPelsPerMeter:单位长度内的像素数
- 0, 0, 0, 0, // [46-49] biClrUsed:可用像素数,设为0即可
- 0, 0, 0, 0, // [50-53] biClrImportant:重要颜色数,设为0即可
- // RGBQUAD MASK
- 0x0, 0xF8, 0, 0, // [54-57] 红色掩码
- 0xE0, 0x07, 0, 0, // [58-61] 绿色掩码
- 0x1F, 0, 0, 0 // [62-65] 蓝色掩码
- };
- widthAlignBytes = ((width * 16 + 31) & ~31) / 8; // 每行需要的合适字节个数
- data_size = widthAlignBytes * height; // 图像数据大小
- file_size = data_size + sizeof(header); // 整个文件的大小
- *((long *)(header + 2)) = file_size;
- *((long *)(header + 18)) = width;
- *((long *)(header + 22)) = height;
- *((long *)(header + 34)) = data_size;
- f_open(&bmpfsrc , (char*)filename, FA_CREATE_NEW | FA_WRITE );
- f_close(&bmpfsrc);
- if( f_open( &bmpfsrc , (char*)filename, FA_OPEN_EXISTING | FA_WRITE) == FR_OK)
- {
- f_write(&bmpfsrc, header, sizeof(header), &mybw); //写头信息
- if (widthAlignBytes == width * 2)
- {
- //ILI9341_GetMultiPixel(0,0,(size_t)data_size,Vpix);//一行
- for(j = 0; j < 240; j++)Vpix[j] = ILI9341_GetPixel(x + j, y + 0);
- f_write(&bmpfsrc, Vpix, (size_t)data_size, &mybw);
- }
- else
- {
- // 每一行单独写入
- const static DWORD DWZERO = 0;
- for (i = height - 1; i >= 0; i--)
- {
- //ILI9341_GetMultiPixel(0,i,(size_t) width,Vpix);//一行
- for(j = 0; j < width; j++)Vpix[j] = ILI9341_GetPixel(x + j, y + i);
- f_write(&bmpfsrc, Vpix, (size_t) width * 2, &mybw);
- f_write(&bmpfsrc, &DWZERO, widthAlignBytes - width * 2, &mybw);
- prog(100 * (height - i) / height); //进度条
- }
- }
- f_close(&bmpfsrc);
- return TRUE;
- }
- else
- return FALSE;
- }
复制代码
eric2013 发表于 2018-4-12 14:40
这样的话,那没问题的,回头我也试试看,你用的那个函数保存的。
|
|