📄 +
字号:
header[2] = (unsigned char)(file_size &0x000000ff);
header[3] = (file_size >> 8) & 0x000000ff;
header[4] = (file_size >> 16) & 0x000000ff;
header[5] = (file_size >> 24) & 0x000000ff;
width=xsize;
header[18] = width & 0x000000ff;
header[19] = (width >> 8) &0x000000ff;
header[20] = (width >> 16) &0x000000ff;
header[21] = (width >> 24) &0x000000ff;
height = ysize;
header[22] = height &0x000000ff;
header[23] = (height >> 8) &0x000000ff;
header[24] = (height >> 16) &0x000000ff;
header[25] = (height >> 24) &0x000000ff;
sprintf((char*)tmp_name,"0:%s.bmp",filename);
f_mount(0, &bmpfs[0]);
bmpres = f_open( &bmpfsrc , (char*)tmp_name, FA_CREATE_NEW | FA_WRITE);
if ( bmpres == FR_OK )
{
bmpres = f_write(&bmpfsrc, header,sizeof(unsigned char)*54, &mybw);
BMP_DEBUG_PRINTF("%0d-%0d\n",ysize,xsize);
for(i=0;i<ysize;i++) //高
{
if(!(xsize%4))
{
for(j=0;j<xsize;j++) //宽
{
bmpres = f_write(&bmpfsrc, pixarr+i*3*xsize+j*3,sizeof(unsigned char)*3, &mybw);
}
}
else
{
for(j=0;j<xsize;j++)
{
bmpres = f_write(&bmpfsrc, pixarr+i*3*xsize+j*3,sizeof(unsigned char)*3, &mybw);
}
bmpres = f_write(&bmpfsrc, kk,sizeof(unsigned char)*(xsize%4), &mybw); //补充字节以补齐
}
}
f_close(&bmpfsrc);
return 0;
}
else if ( bmpres == FR_EXIST ) //如果文件已经存在
{
return FR_EXIST; //返回8
}
else
{
return -1;
}
}
/* 函数:write_bmp3
* 功能:将rgb565数据流(uchar型---前后字节顺序为 b-g g-r b-g g-r b-g g-r....)保存为24位真彩色bmp格式图片
* 输入: pixarr--像素数据流地址 xize--保存图片的宽度 ysize--保存图片的高度 filename--保存图片的名称
* 输出: 0 ---成功 -1 ---失败
* 注意:
* 举例:unsigned short int rgb_buffer2[18*17*2];
* rgb_buffer2数组初始化
* write_bmp3((unsigned char *)rgb_buffer2, 18, 17, "/myimg3");
*
*/
int write_bmp3(unsigned char *pixarr, int xsize, int ysize, char *filename)
{
unsigned char header[54] =
{
0x42, 0x4d, 0, 0, 0, 0,
0, 0, 0, 0, 54, 0,
0, 0, 40,0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 24, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0
};
int i;
int j;
long file_size;
long width;
long height;
unsigned short int tmp_rgb;
unsigned char r,g,b;
unsigned char tmp_name[30];
unsigned int mybw;
char kk[4]={0,0,0,0};
if(!(xsize%4))
file_size = (long)xsize * (long)ysize * 3 + 54;
else
file_size = (long)xsize * (long)ysize * 3 + ysize*(xsize%4) + 54; //宽*高 +补充的字节 + 头部信息
header[2] = (unsigned char)(file_size &0x000000ff);
header[3] = (file_size >> 8) & 0x000000ff;
header[4] = (file_size >> 16) & 0x000000ff;
header[5] = (file_size >> 24) & 0x000000ff;
width=xsize;
header[18] = width & 0x000000ff;
header[19] = (width >> 8) &0x000000ff;
header[20] = (width >> 16) &0x000000ff;
header[21] = (width >> 24) &0x000000ff;
height = ysize;
header[22] = height &0x000000ff;
header[23] = (height >> 8) &0x000000ff;
header[24] = (height >> 16) &0x000000ff;
header[25] = (height >> 24) &0x000000ff;
sprintf((char*)tmp_name,"0:%s.bmp",filename);
f_mount(0, &bmpfs[0]);
bmpres = f_open( &bmpfsrc , (char*)tmp_name, FA_CREATE_NEW | FA_WRITE);
if ( bmpres == FR_OK )
{
bmpres = f_write(&bmpfsrc, header,sizeof(unsigned char)*54, &mybw);
for(i=0;i<ysize;i++) //高
{
if(!(xsize%4))
{
for(j=0;j<xsize;j++) //宽
{
tmp_rgb = (((*(pixarr+i*2*xsize+j*2+1))<<8) | (*(pixarr+i*2*xsize+j*2)));
r = GETR_FROM_RGB16(tmp_rgb);
g = GETG_FROM_RGB16(tmp_rgb);
b = GETB_FROM_RGB16(tmp_rgb);
bmpres = f_write(&bmpfsrc, &b,sizeof(unsigned char), &mybw);
bmpres = f_write(&bmpfsrc, &g,sizeof(unsigned char), &mybw);
bmpres = f_write(&bmpfsrc, &r,sizeof(unsigned char), &mybw);
}
}
else
{
for(j=0;j<xsize;j++)
{
tmp_rgb = (((*(pixarr+i*2*xsize+j*2+1))<<8) | (*(pixarr+i*2*xsize+j*2)));
r = GETR_FROM_RGB16(tmp_rgb);
g = GETG_FROM_RGB16(tmp_rgb);
b = GETB_FROM_RGB16(tmp_rgb);
bmpres = f_write(&bmpfsrc, &b,sizeof(unsigned char), &mybw);
bmpres = f_write(&bmpfsrc, &g,sizeof(unsigned char), &mybw);
bmpres = f_write(&bmpfsrc, &r,sizeof(unsigned char), &mybw);
}
bmpres = f_write(&bmpfsrc, kk,sizeof(unsigned char)*(xsize%4), &mybw);
}
}
f_close(&bmpfsrc);
return 0;
}
else if ( bmpres == FR_EXIST ) //如果文件已经存在
{
return FR_EXIST; //8
}
else
{
return -1;
}
}
/**********************************************************
* 函数名:Screen_shot
* 描述 :截取LCD指定位置 指定宽高的像素 保存为24位真彩色bmp格式图片
* 输入 : x ---水平位置
* y ---竖直位置
* Width ---水平宽度
* Height ---竖直高度
* filename ---文件名
* 输出 : 0 ---成功
* -1 ---失败
* 8 ---文件已存在
* 举例 :Screen_shot(0, 0, 320, 240, "/myScreen");-----全屏截图
* 注意 :x范围[0,319] y范围[0,239] Width范围[0,320-x] Height范围[0,240-y]
* 如果文件已存在,将直接返回
**************************************************************/
int Screen_shot(unsigned short int x, unsigned short int y, unsigned short int Width, unsigned short int Height, unsigned char *filename)
{
unsigned char header[54] =
{
0x42, 0x4d, 0, 0, 0, 0,
0, 0, 0, 0, 54, 0,
0, 0, 40,0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 24, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0
};
int i;
int j;
long file_size;
long width;
long height;
unsigned short int tmp_rgb;
unsigned char r,g,b;
unsigned char tmp_name[30];
unsigned int mybw;
char kk[4]={0,0,0,0};
// if(!(Width%4))
// file_size = (long)Width * (long)Height * 3 + 54;
//else
file_size = (long)Width * (long)Height * 3 + Height*(Width%4) + 54; //宽*高 +补充的字节 + 头部信息
header[2] = (unsigned char)(file_size &0x000000ff);
header[3] = (file_size >> 8) & 0x000000ff;
header[4] = (file_size >> 16) & 0x000000ff;
header[5] = (file_size >> 24) & 0x000000ff;
width=Width;
header[18] = width & 0x000000ff;
header[19] = (width >> 8) &0x000000ff;
header[20] = (width >> 16) &0x000000ff;
header[21] = (width >> 24) &0x000000ff;
height = Height;
header[22] = height &0x000000ff;
header[23] = (height >> 8) &0x000000ff;
header[24] = (height >> 16) &0x000000ff;
header[25] = (height >> 24) &0x000000ff;
sprintf((char*)tmp_name,"0:%s.bmp",filename);
f_mount(0, &bmpfs[0]);
bmpres = f_open( &bmpfsrc , (char*)tmp_name, FA_CREATE_NEW | FA_WRITE );
f_close(&bmpfsrc); //新建文件之后要先关闭再打开才能写入
bmpres = f_open( &bmpfsrc , (char*)tmp_name, FA_OPEN_EXISTING | FA_WRITE);
if ( bmpres == FR_OK )
{
bmpres = f_write(&bmpfsrc, header,sizeof(unsigned char)*54, &mybw);
for(i=0;i<Height;i++) //高
{
if(!(Width%4))
{
for(j=0;j<Width;j++) //宽
{
#ifdef HX8347
tmp_rgb = bmp4(j+y,Height-i+x);
#else
tmp_rgb = bmp4(Height-i+x,j+y);
#endif
r = GETR_FROM_RGB16(tmp_rgb);
g = GETG_FROM_RGB16(tmp_rgb);
b = GETB_FROM_RGB16(tmp_rgb);
bmpres = f_write(&bmpfsrc, &b,sizeof(unsigned char), &mybw);
bmpres = f_write(&bmpfsrc, &g,sizeof(unsigned char), &mybw);
bmpres = f_write(&bmpfsrc, &r,sizeof(unsigned char), &mybw);
}
}
else
{
for(j=0;j<Width;j++)
{
#ifdef HX8347
tmp_rgb = bmp4(j+y,Height-i+x);
#else
tmp_rgb = bmp4(Height-i+x,j+y);
#endif
r = GETR_FROM_RGB16(tmp_rgb);
g = GETG_FROM_RGB16(tmp_rgb);
b = GETB_FROM_RGB16(tmp_rgb);
bmpres = f_write(&bmpfsrc, &b,sizeof(unsigned char), &mybw);
bmpres = f_write(&bmpfsrc, &g,sizeof(unsigned char), &mybw);
bmpres = f_write(&bmpfsrc, &r,sizeof(unsigned char), &mybw);
}
bmpres = f_write(&bmpfsrc, kk,sizeof(unsigned char)*(Width%4), &mybw);
}
}
f_close(&bmpfsrc);
return 0;
}
else if ( bmpres == FR_EXIST ) //如果文件已经存在
{
return FR_EXIST; //8
}
else
{
return -1;
}
}
/******************* CHD1807 Team *****END OF FILE************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -