【问题标题】:When convering a transparent png image to bitmap its not retaining the transparency?将透明的 png 图像转换为位图时,它不会保留透明度吗?
【发布时间】:2011-04-15 11:20:51
【问题描述】:

我希望有人可以帮助我解决这个问题。我目前正在使用 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?它不支持透明度,但另一方面:TGA 支持(与 BMP 几乎相同的格式)。

标签: .net c++ image-processing imagemagick


【解决方案1】:

位图不支持透明度。通常,您会以相反的方式进行操作。您让 BMP 选择一种表示透明的颜色,并在转换为支持透明的格式时使颜色变为透明。

【讨论】:

    猜你喜欢
    • 2021-10-03
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多