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