欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

GetPixelAddress()函数Alpha通道会丢失

程序员文章站 2023-03-31 23:08:00
CImage类中GetPixelAddress()函数来设置获取对应的颜色值是发现Alpha无效。 不管 newBuffer[3] = a; 如何设置 newImage始终无法透明。 这里要注意的是 newImage.Create(width,height,32); 这里第三个函数一定要设置为32 ......

cimage类中getpixeladdress()函数来设置获取对应的颜色值是发现alpha无效。

void cgbimage::load(){
	cimage sourceimage;
	sourceimage.load(l"c:\\users\\ju'k\\desktop\\cgaussblur\\1.png");
	int bpp = sourceimage.getbpp();
	int width = sourceimage.getwidth();
	int height = sourceimage.getheight();

	cimage newimage;
	newimage.create(width,height,32);
	for(int w = 0; w < width;w++){
		for(int h = 0; h < height;h++){
			if(w == 20 && h == 20){
				int xx = 0;
			}
			byte* buffer = (byte*)sourceimage.getpixeladdress(w,h);
			byte b = buffer[0];
			byte g = buffer[1];
			byte r = buffer[2];
			byte a = buffer[3];


			byte* newbuffer = (byte*)newimage.getpixeladdress(w,h);

			newbuffer[0] = b;
			newbuffer[1] = g;
			newbuffer[2] = r;
			newbuffer[3] = a;

		}
	}

	clsid pngclsid;
	getencoderclsid(_t("image/png"), &pngclsid);
	newimage.save(l"c:\\users\\ju'k\\desktop\\cgaussblur\\1_1.png");


}

  

不管  newbuffer[3] = a; 如何设置 newimage始终无法透明。

这里要注意的是

newimage.create(width,height,32);

这里第三个函数一定要设置为32

第四个函数这里是默认的为0,应该设置为cimage::createalphachannel。