Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 将透明png图像转换为位图时,是否不保留透明度?_.net_C++_Image Processing_Imagemagick - Fatal编程技术网

.net 将透明png图像转换为位图时,是否不保留透明度?

.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::

我希望有人能帮我解决这个问题。我目前使用IMAGE AGE.NET包装器将透明的PNG图像转换为位图(我们正在做这件事,因为我们需要添加C++图像IMAGE的图像处理功能)。现在一切都很好,除了当我使用一个有透明度的图像。当我进行转换时,透明区域倾向于变成黑色。现在我的问题是,正在进行转换的代码是C++,并且很难找出它正在做什么。请参阅下面的代码:

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格式相同)。