2011-09-09 16 views
2

如果我有兩個獨立的JPG文件與圖像和Alpha通道,我該如何創建一個PNG文件?在C#中創建一個具有JPG和AlphaChannel的PNG#

JPG圖片+ JPG面膜 - > PNG透明度

我試圖WPF的解決方案:

image.OpacityMask = new ImageBrush (new BitmapImage (uriMask)); 

和System.Drawing中。

Image bmpMask = Image.FromFile (maskFilePath); 
gfxNewImage.SetClip ( Graphics.FromImage (bmpMask)); 

,但我有兩個(黑色背景,或全黑)

任何想法或例題?

三江源

+0

如果不清楚,Mask.jpg圖像是一個白色到黑色值的圖像。 –

回答

2

好讓我們假設你有一個JPEG Picute和PNG圖片Alpha通道。 您應該這樣做,並且只有在這兩個圖像大小相同的情況下才能使用。

Bitmap jpegFile = new Bitmap("JpegFile.jpg"); 
Bitmap alphaFile = new Bitmap("Png.jpg"); 

for(int i=0;i<jpegFile.Width;i++) 
{ 
    for(int j=0;j<jpegFile.Height;j++) 
    { 
     Color withAlpha = jpegFile.GetPixel(i,j); 
      withAlpha.A = alphaFile.GetPixel(i,j).A; 
     jpegFile.SetPixel(withAlpha); 
    } 
} 
+0

好的,我會試試。在我的情況下,我有2個JPG,但我會選擇灰色值作爲Alpha。謝謝。 –

+0

@Mario Morales這個算法是可行的,但是當你實現它的時候你必須小心,因爲如果你使用大量圖片處理,你應該找到一種方法來處理多線程或者如果可能的話優化它。 – Burimi

+0

它有一些變化:你需要一個32bpp的目標圖像'位圖outImage =新的位圖(jpegFile.Width,jpegFile.Height,PixelFormat.Format32bppArgb);'並創建一個顏色,因爲'Color.A'不可寫入'Color withAlpha = Color.FromArgb(alphaFile.GetPixel(i,j).R,jpegFile.GetPixel(i,j));' –

1

試試這個參數Grafics對象:

using (var g = Graphics.FromImage(bmpMask)) 
{ 
    g.SmoothingMode = SmoothingMode.AntiAlias; 
    g.InterpolationMode = InterpolationMode.HighQualityBicubic; 
    g.DrawImage(source, 0, 0, width, height); 
} 
+0

它不工作'SmoothingMode'或'InterpolationMode'不會與透明度有關。 –

相關問題