.net 将透明png图像转换为位图时,是否不保留透明度?
我希望有人能帮我解决这个问题。我目前使用IMAGE AGE.NET包装器将透明的PNG图像转换为位图(我们正在做这件事,因为我们需要添加C++图像IMAGE的图像处理功能)。现在一切都很好,除了当我使用一个有透明度的图像。当我进行转换时,透明区域倾向于变成黑色。现在我的问题是,正在进行转换的代码是C++,并且很难找出它正在做什么。请参阅下面的代码:.net 将透明png图像转换为位图时,是否不保留透明度?,.net,c++,image-processing,imagemagick,.net,C++,Image Processing,Imagemagick,我希望有人能帮我解决这个问题。我目前使用IMAGE AGE.NET包装器将透明的PNG图像转换为位图(我们正在做这件事,因为我们需要添加C++图像IMAGE的图像处理功能)。现在一切都很好,除了当我使用一个有透明度的图像。当我进行转换时,透明区域倾向于变成黑色。现在我的问题是,正在进行转换的代码是C++,并且很难找出它正在做什么。请参阅下面的代码: System::Drawing::Bitmap^ Image::ToBitmap() { System::Drawing::
System::Drawing::Bitmap^ Image::ToBitmap()
{
System::Drawing::Bitmap^ bitmap =
gcnew System::Drawing::Bitmap(image->columns(), image->rows(),
System::Drawing::Imaging::PixelFormat::Format24bppRgb);
System::Drawing::Imaging::BitmapData^ bitmapData = bitmap->LockBits(
System::Drawing::Rectangle(0,0,image->columns(), image->rows()),
System::Drawing::Imaging::ImageLockMode::ReadWrite,
System::Drawing::Imaging::PixelFormat::Format24bppRgb);
unsigned char *ptr = (unsigned char *) bitmapData->Scan0.ToPointer();
std::string map = "BGR";
for( int i=0; i<image->rows(); i++ )
{
image->write(
0, i, image->columns(), 1, map,
MagickCore::CharPixel, (void *)ptr);
ptr += bitmapData->Stride;
}
bitmap->UnlockBits(bitmapData);
return bitmap;
}
System::Drawing::Bitmap^Image::ToBitmap()
{
系统::绘图::位图^Bitmap=
gcnew System::绘图::位图(图像->列(),图像->行(),
系统::绘图::成像::像素格式::格式24bpprgb);
系统::绘图::图像::位图数据^位图数据=位图->锁位(
系统::绘图::矩形(0,0,图像->列(),图像->行()),
系统::绘图::成像::图像锁定模式::读写,
系统::绘图::成像::像素格式::格式24bpprgb);
unsigned char*ptr=(unsigned char*)位图数据->Scan0.ToPointer();
std::string map=“BGR”;
对于(int i=0;irows();i++)
{
图像->写入(
0,i,图像->列(),1,映射,
MagickCore::CharPixel,(void*)ptr);
ptr+=位图数据->步幅;
}
位图->解锁位(位图数据);
返回位图;
}
可以帮助解密C++代码或者指引我正确的方向。任何信息都会有很大的帮助
非常感谢。位图不支持透明度。一般来说,你是用另一种方式来做的。使用BMP选择表示透明的颜色,当转换为支持透明的格式时,该颜色将变为透明。位图不支持透明。一般来说,你是用另一种方式来做的。您有一个BMP,请选择一种表示透明的颜色,当转换为支持透明的格式时,该颜色将变为透明。为什么需要转换为BMP?它不支持透明度,但另一方面:TGA支持(几乎与BMP格式相同)。为什么需要转换为BMP?它不支持透明度,但另一方面:TGA支持(几乎与BMP格式相同)。