FreeImage编程 - 创建图片

上一节我们学习了如何读取一张图片数据,这节我们用FreeImage来创建一张图片。FreeImage能存取多种格式的图片。而且很简单,我们将创建一张256*256的PNG图片,图片上分别有三行RGB颜色。其中Red颜色ALPHA通道是128,即是透明的。

#include <stdio.h>
#include <FreeImage.h>
 
//图片大小
#define IMG_WIDTH 256
#define IMG_HEIGHT 256
 
int main()
{
    int x,y;
    int mode=0;
 
    FreeImage_Initialise(TRUE);
 
    //分配图片空间,后面3个8,表示RGB每个的有效位
    FIBITMAP* bitmap =FreeImage_Allocate(IMG_WIDTH,IMG_HEIGHT,32,8,8,8);
 
    for(y=0;y<FreeImage_GetHeight(bitmap);y++)
    {
        //把图片内容分成三份
        //每份的颜色分别是RGB
        //Red的ALPHA是128,也就是0.5
 
        if(y<IMG_HEIGHT/3)
            mode=0;
        else if(y<IMG_HEIGHT/3*2)
            mode=1;
        else
            mode=2;
 
        BYTE *bits =FreeImage_GetScanLine(bitmap,y);
 
        for(x=0;x<FreeImage_GetWidth(bitmap);x++)
        {
            if(mode==0)
            {
                //blue
                bits[0] = 255;
                bits[1] = 0;
                bits[2] = 0;
                bits[3] = 255;
            }
            else if(mode==1)
            {
                //green
                bits[0] = 0;
                bits[1] = 255;
                bits[2] = 0;
                bits[3] = 255;
            }
            else if(mode==2)
            {
                //red
                bits[0] = 0;
                bits[1] = 0;
                bits[2] = 255;
                bits[3] = 128;
            }
            bits +=4;
        }
    }
 
    //保存图片为PNG格式
    if(false ==FreeImage_Save(FIF_PNG, bitmap,"123.png", PNG_DEFAULT))
    {
        printf("save image error\n");
    }
 
    FreeImage_Unload(bitmap);
 
    return 0;
}

效果如下:


大家会发现图片RGB的顺序是颠倒的,就像我们读取图片信息一样。所以大家在创建图片时一定要注意这个问题。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值