Image类提供了两种方法输入和保存图像
① 输入2个图片路径,第一个是原图,第二个是精灵图。使用这种方法时,请确保原图的透明区域为黑色,而精灵图的非透明部分为黑色、透明区域为白色。
② 输入1个图片路径和1个真假值决定这个Image是否具有透明区域。当你想使用这种方法自动生成透明区域时,可以统一使用任意一种颜色作为透明色,但该图片的第一个像素(即左上角的像素)必须为该透明色。
///////////////////////////代码部分///////////////////////////////////
#include class Image{ public: IMAGE imgA; IMAGE imgB; bool haveTransparentArea; public: Image(){} Image(LPCTSTR strA,LPCTSTR strB){ loadimage(&imgA,strA); loadimage(&imgB,strB); haveTransparentArea=true; } Image(LPCTSTR strA,bool haveTransparentArea1){ loadimage(&imgA,strA); haveTransparentArea=haveTransparentArea1; if(haveTransparentArea){ imgB=imgA; DWORD* pa = GetImageBuffer(&imgA); DWORD* pb = GetImageBuffer(&imgB); COLORREF c=pa[0]; int w = imgA.getwidth(); int h = imgA.getheight(); for (int i=1; i pb[i] = WHITE; pa[i] = BLACK; } else { pb[i] = BLACK; } } pa[0]=BLACK; pb[0]=WHITE; } } }; inline void putimage(int x,int y,const Image* image){ if (image->haveTransparentArea){ putimage(x-image->imgA.getwidth()/2,y-image->imgA.getheight()/2,&image->imgB,SRCAND); putimage(x-image->imgA.getwidth()/2,y-image->imgA.getheight()/2,&image->imgA,SRCPAINT); } else putimage(x-image->imgA.getwidth()/2,y-image->imgA.getheight()/2,&image->imgA); } ///////////////////////////代码部分/////////////////////////////////// ///////////////////////////示例代码部分/////////////////////////////////// int main(){ initgraph(800, 640); Image* background= new Image(_T(\"picture\\\\background.bmp\") ,false); Image* stg1= new Image(_T(\"picture\\\\stg.bmp\") ,true); Image* stg2= new Image(_T(\"picture\\\\stg.bmp\") ,_T(\"picture\\\\stg_a.jpg\")); putimage(400,320,background); putimage(800/3,320,stg1); putimage(800/3*2,320,stg2); getch();//请自行添加#include return 0; } ///////////////////////////示例代码部分/////////////////////////////////// 示例图片素材: background Stg stg_a 示例代码运行结果 因篇幅问题不能全部显示,请点此查看更多更全内容