Linux GCC 编程:使用 qdbmp 库操作 BMP 图像 (变色、切割、缩放、旋转)
以下是一个在 Linux 操作系统中使用 GCC 编程,利用 qdbmp 库实现对 '箭头1.bmp' 图像进行操作的示例代码:
#include <stdio.h>
#include <stdlib.h>
#include "qdbmp.h"
int main()
{
BMP* bmp;
UCHAR r, g, b;
UINT width, height;
UCHAR* pixel;
UINT x, y;
// 打开图像
bmp = BMP_ReadFile('箭头1.bmp');
BMP_CHECK_ERROR(stdout, -1);
// 获取图像宽度和高度
width = BMP_GetWidth(bmp);
height = BMP_GetHeight(bmp);
// 变色
for (x = 0; x < width; ++x) {
for (y = 0; y < height; ++y) {
// 获取像素值
BMP_GetPixelRGB(bmp, x, y, &r, &g, &b);
// 修改像素值
r = 0; // 修改为红色
g = 0; // 修改为绿色
b = 255; // 修改为蓝色
// 设置像素值
BMP_SetPixelRGB(bmp, x, y, r, g, b);
}
}
// 切割
// 假设箭头的位置在(100, 100)到(200, 200)之间
// 创建一个新的图像用于保存切割出来的箭头
BMP* arrow = BMP_Create(101, 101, 24);
for (x = 100; x < 201; ++x) {
for (y = 100; y < 201; ++y) {
// 获取原图像的像素值
BMP_GetPixelRGB(bmp, x, y, &r, &g, &b);
// 设置切割出来的箭头图像的像素值
BMP_SetPixelRGB(arrow, x - 100, y - 100, r, g, b);
}
}
// 保存切割出来的箭头图像
BMP_WriteFile(arrow, '切割箭头.bmp');
BMP_CHECK_ERROR(stdout, -2);
BMP_Free(arrow);
// 放大或缩小
// 假设放大2倍
BMP* resized = BMP_Create(width * 2, height * 2, 24);
for (x = 0; x < width; ++x) {
for (y = 0; y < height; ++y) {
// 获取原图像的像素值
BMP_GetPixelRGB(bmp, x, y, &r, &g, &b);
// 设置放大后的图像的像素值
BMP_SetPixelRGB(resized, x * 2, y * 2, r, g, b);
BMP_SetPixelRGB(resized, x * 2 + 1, y * 2, r, g, b);
BMP_SetPixelRGB(resized, x * 2, y * 2 + 1, r, g, b);
BMP_SetPixelRGB(resized, x * 2 + 1, y * 2 + 1, r, g, b);
}
}
// 保存放大后的图像
BMP_WriteFile(resized, '放大箭头.bmp');
BMP_CHECK_ERROR(stdout, -3);
BMP_Free(resized);
// 旋转(选做)
// 略
// 保存修改后的图像
BMP_WriteFile(bmp, '修改后的箭头.bmp');
BMP_CHECK_ERROR(stdout, -4);
// 释放内存
BMP_Free(bmp);
return 0;
}
在编译时,需要将 qdbmp 库与代码链接在一起:
gcc -o main main.c qdbmp.c -lm
执行编译后的可执行文件 main,即可实现对 '箭头1.bmp' 图像的变色、切割、放大或缩小等操作,并保存修改后的图像文件。
原文地址: https://www.cveoy.top/t/topic/pfEA 著作权归作者所有。请勿转载和采集!