2011-04-15 70 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選擇一種顏色,這意味着透明,並轉換爲支持透明度的顏色變爲透明的格式。