0

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

1 回答 1

1

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

Magick::Image image;
image.read(filename);
if (image.matte())
  executeMethod(image);
于 2013-11-08T07:50:28.040 回答