如何判断Magick :: Image是否有alpha通道?

时间:2013-11-07 20:17:03

标签: c++ imagemagick

如果我使用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);

1 个答案:

答案 0 :(得分:1)

您可以使用matte()属性来确定您的图像是否支持透明度。

Magick::Image image;
image.read(filename);
if (image.matte())
  executeMethod(image);