如果我使用read函数将图像加载到ImageMagick中,如下所示:
Magick::Image image;
image.read(filename);
如何判断加载的图像是否有alpha通道?当我操作具有透明度的PNG像素与加载不透明JPG时,我希望将程序指向不同的算法。
我可以做一个简单的是/否测试吗?
我问的原因是因为如果加载的图像没有它们,下面的代码片段似乎会分配随机的不透明度,而不是假设像素完全不透明:
// transform the pixels to something GL can use
Magick::Pixels view(image);
GLubyte *pixels = (GLubyte*)malloc( sizeof(GLubyte)*width*height*4 );
for ( ssize_t row=0; row<height; row++ ) {
const Magick::PixelPacket *im_pixels = view.getConst(0,row,width,1);
for ( ssize_t col=0; col<width; col++ ) {
*(pixels+(row*width+col)*4+0) = (GLubyte)im_pixels[col].red;
*(pixels+(row*width+col)*4+1) = (GLubyte)im_pixels[col].green;
*(pixels+(row*width+col)*4+2) = (GLubyte)im_pixels[col].blue;
*(pixels+(row*width+col)*4+3) = 255-(GLubyte)im_pixels[col].opacity;
}
}
*pTex = pContext->LoadTexture( pixels, width, height );
free(pixels);
答案 0 :(得分:1)
您可以使用matte()属性来确定您的图像是否支持透明度。
Magick::Image image;
image.read(filename);
if (image.matte())
executeMethod(image);