继续
时间: 2024-02-28 14:53:16 浏览: 44
以下是完整的代码示例,包括头文件和一个简单的main函数:
```c
#include <stdio.h>
#include <stdlib.h>
void rgba8888_to_rgb888(unsigned char *rgba, unsigned char *rgb, int width, int height);
int main() {
int width = 640; // 图片宽度
int height = 480; // 图片高度
int rgba_size = width * height * 4; // RGBA8888格式图片数据大小
int rgb_size = width * height * 3; // RGB888格式图片数据大小
// 分配内存
unsigned char *rgba_data = (unsigned char*)malloc(rgba_size);
unsigned char *rgb_data = (unsigned char*)malloc(rgb_size);
// 生成RGBA8888格式图片数据(这里简单地将所有像素点设置为红色)
for (int i = 0; i < rgba_size; i += 4) {
rgba_data[i] = 255; // R
rgba_data[i + 1] = 0; // G
rgba_data[i + 2] = 0; // B
rgba_data[i + 3] = 255; // A
}
// 将RGBA8888格式图片转换为RGB888格式图片
rgba8888_to_rgb888(rgba_data, rgb_data, width, height);
// 打印RGB888格式图片数据(前10个像素点)
for (int i = 0; i < 10; i++) {
printf("%d %d %d\n", rgb_data[i * 3], rgb_data[i * 3 + 1], rgb_data[i * 3 + 2]);
}
// 释放内存
free(rgba_data);
free(rgb_data);
return 0;
}
void rgba8888_to_rgb888(unsigned char *rgba, unsigned char *rgb, int width, int height) {
int i, j, k, n;
n = width * height;
for (i = 0, j = 0; i < n; i++, j += 4) {
rgb[i * 3] = rgba[j];
rgb[i * 3 + 1] = rgba[j + 1];
rgb[i * 3 + 2] = rgba[j + 2];
}
}
```
在这个示例中,我们生成一个大小为640x480的RGBA8888格式的图片数据,然后将其转换为RGB888格式的图片数据,并打印前10个像素点的R、G、B分量。
阅读全文