2010-08-13 86 views
2

我正在使用下面的代碼來調整tif大小。 tif具有透明度設置的alpha通道。我正在嘗試調整這張圖片的尺寸,並尊重透明度,但此刻它會以黑色背景出現。有任何想法嗎?Alpha通道透明度和調整圖像文件大小

public static void ResizeImage(string OriginalImagePath, string NewImagePath, int Width, int Height) 
     { 
      Size NewSize = new Size(Width, Height); 

      using (Image OriginalImage = Image.FromFile(OriginalImagePath)) 
      { 
       //Graphics objects can not be created from bitmaps with an Indexed Pixel Format, use RGB instead. 
       PixelFormat Format = OriginalImage.PixelFormat; 
       if (Format.ToString().Contains("Indexed")) 
        Format = PixelFormat.Format24bppRgb; 

       using (Bitmap NewImage = new Bitmap(NewSize.Width, NewSize.Height, OriginalImage.PixelFormat)) 
       { 
        using (Graphics Canvas = Graphics.FromImage(NewImage)) 
        { 
         Canvas.SmoothingMode = SmoothingMode.AntiAlias; 
         Canvas.InterpolationMode = InterpolationMode.HighQualityBicubic; 
         Canvas.PixelOffsetMode = PixelOffsetMode.HighQuality; 
         Canvas.DrawImage(OriginalImage, new Rectangle(new Point(0, 0), NewSize)); 
         NewImage.Save(NewImagePath, OriginalImage.RawFormat); 
        } 
       } 
      } 
     } 

    } 
+0

1)對於您遇到問題的圖像,OriginalImage.PixelFormat的值是多少? 2)嘗試保存到PNG。這仍然會給你黑色的像素? – 2010-08-16 20:56:07

回答

0

我實際上發現,由於透明度採用photoshop存儲在tiff格式中,所以最好是通過自動化photoshop創建png,然後摳出png。

0

嘗試這種情況:

if (Format.ToString().Contains("Indexed")) 
    Format = PixelFormat.Format32bppArgb; 

Format32bppArgb指定像素格式alpha通道。

而且我覺得你的意思是這樣:

using (Bitmap NewImage = new Bitmap(NewSize.Width, NewSize.Height, Format)) 

編輯:

事實上,儘量只強制在NewImage像素格式Format32bppArgb像這樣:

using (Bitmap NewImage = new Bitmap(NewSize.Width, NewSize.Height, 
    PixelFormat.Format32bppArgb)) 
+0

嘗試了您所建議的更改,但仍以黑色背景顯示。 – RubbleFord 2010-08-13 09:17:20

0
Canvas.Clear(Color.Transparent) 

之前blit。

+0

試過,沒有運氣。 – RubbleFord 2010-08-16 08:18:45

+0

並且您是否將Codesleuth建議的新位圖的像素格式設置爲Format32bppRgb? 24位顏色不會透明,不存在Alpha通道。 – Tergiver 2010-08-16 14:20:46

相關問題