#include // C 语言标准输入输出函数库
#include "Image.h" // 24 位 RGB 彩色图片 蓝B 绿G 红R 排列
// 软件断点
#define SW_BREAKPOINT asm(" SWBP 0 ");
typedef struct
{
unsigned char Blue; // 蓝色分量
unsigned char Green; // 绿色分量
unsigned char Red; // 红色分量
} tagRGB24;
typedef struct tagRGB24 RGB24;
unsigned char Gray[240000];
void RGB2Gray(unsigned int N, const unsigned char *Image, unsigned char *Gray)
{
unsigned int i;
for(i = 0; i < N ;i++)
{
// 原始公式
// Gray = Image[3 * i + 2] * 0.299 + Image[3 * i + 1] * 0.587 + Image[3 * i] * 0.114;
// 8 位精度优化
Gray = (Image[3 * i + 2] * 76 + Image[3 * i + 1] * 150 + Image[3 * i] * 30) >> 8;
}
}
int main(void)
{
// 转换 RGB24 图片为灰度图
// 前 8 个字节是图片信息
RGB2Gray(240000, Image +8, Gray);
// 断点
SW_BREAKPOINT;
} |