当将透明png图像转换为位图时,它不会保留透明度

When convering a transparent png image to bitmap its not retaining the transparency?

本文关键字:透明度 保留 位图 透明 png 图像 转换      更新时间:2023-10-16

我希望有人能帮我解决这个问题。我目前正在使用ImageMagick。NET包装器将透明png图像转换为位图(我们这样做是因为我们需要c++ imageMagick附带的附加图像处理功能)。现在一切都很好,除了当我使用一个有透明度的图像。当我进行转换时,透明区域会变成黑色。现在我的问题是做转换的代码是在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;
    }
有谁能帮我破译c++代码或者给我指个方向吗?任何信息都会有很大的帮助。 许多谢谢。

位图不支持透明度。一般情况下,你可以反过来做。你有一个BMP选择一个表示透明的颜色,当转换为支持透明的格式时,该颜色被设置为透明。