/**
* @brief :实现bmp格式图片的2倍缩小功能,并输出新的目标bmp格式文件。最后利用800*480的开发板,展示缩放后的bmp文件
因为只是进行函数练习,未采用函数封装的做法
* @author ni456xinmie@163.com
* @date 2024/05/12
* CopyRight (c) 2023-2024 ni456xinmie@163.com All Right Reseverd
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MUL 2 // 规定缩放倍数,多重倍数需后续笔者继续优化
#pragma pack(1) // 取消默认字节对齐
typedef struct tagBITMAPFILEHEADER // bmp格式图片的文件信息头1
{
unsigned short type; // 文件标识,字母编码“BM”
unsigned int size; // 位图文件大小,以字节为单位
unsigned short reserved1; // 位图文件保留字,为0
unsigned short reserved2; // 位图文件保留字,为0
unsigned int offBits; // 文件开始到位图数据开始自建的偏移量,单位字节
} BMF_HEADER;
typedef struct tagBITMAPINFOHEADER // bmp格式图片的文件信息头2
{
unsigned int biSize; // 图像描述信息块大小,常为28H
int width; // 图像宽度
int height; // 图像高度
unsigned short biPlanes; // 图像plane总数(恒为1)
unsigned short biBit_depth; // 记录颜色的位数取值1
unsigned int biCompression; // 数据压缩方式
unsigned int biSizeImage; // 图像区数据的大小,必须是4的倍数
int biXPelsPerMeter; // 水平每米像素
int biYPelsPerMeter; // 垂直每米像素
unsigned int biClrUsed; // 图像所用颜色素,不用,固定为0
unsigned int biClrImportant; // 重要颜色数,不用,固定为0
} BMFI_HEADER;
#pragma pack() // 恢复默认字节对齐
int main(int argc, char *argv[])
{
// 1.打开源图片文件,并进行信息提取
BMF_HEADER S1;
BMFI_HEADER S2; // 用于头文件信息提取
FILE *bmp_fp = fopen(argv[1], "rb+"); // 打开源图片文件
if (argc != 3) // 错误判断
{
printf("Usage:%s n", argv[0]);
exit(1);
}
if (!bmp_fp) // 错误判断
{
perror("fopen()");
exit(1);
}
fread(&S1, 1, 14, bmp_fp); // 进行源图片的头文件信息提取
fread(&S2, 1, 40, bmp_fp);
int bmp_size = S2.width * S2.height * S2.biBit_depth / 8;
char bmp_buf[bmp_size]; // 申请空间,存放源图片信息
fread(bmp_buf, 1, bmp_size, bmp_fp); // 读取图片文件信息
fclose(bmp_fp); // 关掉源图片文件
// 2.进行源图片的数据处理
/*
此处的思路,是先将图片信息进行缩放,即用一个新的数组进行采样,每MUL个原数组拼成一个新的数组
然后再利用采样好的数据进行输出到文件或者LCD
因此此处仅考虑按顺序采样即可,保证数据不丢失
*/
char newbuf[bmp_size / MUL / MUL]; // 申请数组,存放重新采样后的图片信息
int cnt = 0;
for (int y = 0; y = 0; y--) // 此处要写新图片的尺寸,以完整的输入整张图片信息
{
for (int x = 0; x
服务器托管,北京服务器托管,服务器租用,机房机柜带宽租用
咨询:董先生
电话13051898268 QQ/微信93663045!
上一篇: spring的常用注解
下一篇: 高通相机camx-chi 架构详解