2011-04-15 46 views
0

我希望有人能帮助我解决这个问题。我目前使用ImageMagick.NET包装将透明png图像转换为位图(我们正在这样做,因为我们需要C++ imageMagick附带的附加图像处理功能)。现在,除了当我使用透明的图像时,一切都很好。当我进行转换时,透明区域会变成黑色。现在这里是我的问题,正在做转换的代码是用C++编写的,发现很难弄清楚它在做什么。请参阅下面的代码:当一个透明PNG图像转化为位图时,它不保留透明度?

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++代码或点我到正确的方向。任何信息将是一个很大的帮助。

很多谢谢。

+0

为什么你需要转换为BMP?它不支持透明度,但另一方面:TGA确实(与BMP格式几乎相同)。 – Rookie 2011-04-15 11:26:03

回答

4

位图不支持透明度。一般来说,你是这样做的。您有一个BMP选择一种颜色,这意味着透明,并转换为支持透明度的颜色变为透明的格式。