您好,欢迎访问沃航(武汉)科技有限公司官方网站
bmp翻转程序
2026-02-23 19:47:07
#include <stdio.h>

unsigned char bin[5*1024*1024];

int main(int argc, char *argv[])
{
    int way = 0; // 方法变量,0:为修改调色板;1:为修改位图内容
    if (argc < 2)
    {
        printf("请输入图片路径\n");
        return -__LINE__;
    }
    if (argc >= 3)
    {
        if (argv[2][0] == '0')
        {
            way = 0;
        }
        else if (argv[2][0] == '1')
        {
            way = 1;
        }
    }
    FILE *fp = fopen(argv[1], "rb");
    if (fp == NULL)
    {
        printf("打开文件失败\n");
        return -__LINE__;
    }
    int filesize = fread(bin, 1, sizeof(bin), fp);
    if (filesize <= 0)
    {
        printf("文件读取失败\n");
        return -__LINE__;
    }
    fclose(fp);
    if (way == 0)
    { // 修改bmp位图的调色板
        for (int i = 0; i < 4; i++)
        {
            int tmp = bin[54 + i];
            bin[54 + i] = bin[58 + i];
            bin[58 + i] = tmp;
        }
    }
    else if (way == 1)
    { // 修改位图的内容
        int w = bin[18] | (bin[19] << 8) | (bin[20] << 16) | (bin[21]<<24);
        int h = bin[22] | (bin[23] << 8) | (bin[24] << 16) | (bin[25]<<24);
        printf("位图宽度为:%d,高度为:%d\n", w, h);
        int w1 = 32 * ((w + 31) / 32); // 一行所需要的bit数
        for (int i = 0; i < h; i++)
        {
            for (int j = 0; j < w; j++)
            {
                int offset = i * w1 + j; // 偏移的点数
                bin[62 + offset / 8]  ^= (0x80 >> (offset % 8));
            }
        }
    }
    fp = fopen(argv[1], "wb");
    if (fp == NULL)
    {
        printf("再次打开文件失败\n");
        return -__LINE__;
    }
    if (fwrite(bin, 1, filesize, fp) < 0)
    {
        printf("写入文件失败\n");
        return -__LINE__;
    }
    fclose(fp);
    return 0;
}


文章作者:沃航科技

联系我们
地址:
武汉市洪山区蓝晶国际7栋903
QQ:
932773931
电话:
027-59761089-806
手机:
13397158231
邮箱:
jevian_ma@worldflying.cn
×
物联网组态平台
试用账号:123456
试用密码:123456
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn
×
积木编程平台
试用方式:试用手机号码注册即可使用
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn