上一节我们学习了如何读取一张图片数据,这节我们用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的顺序是颠倒的,就像我们读取图片信息一样。所以大家在创建图片时一定要注意这个问题。