2011-09-09 17 views
2

イメージとアルファチャンネルの2つに分かれたJPGファイルがある場合、どのようにしてPNGファイルを作成できますか?C言語でJPGとAlphaChannelを持つPNGを作成する

JPGイメージ+ JPGマスク - >私はWPFのソリューションを試してみた透明

とPNG:

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

とSystem.Drawing。

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

が、私は(黒の背景、またはフルブラック)の両方に問題

任意のアイデアや例がありますか?

ありがとう

+0

明らかでない場合、Mask.jpg画像は白から黒の値を持つ画像です。 –

答えて

2

[OK]を、あなたが、アルファチャンネルでJPEG PicuteおよびPNG画像を持っていると仮定しましょう。 これを行う必要があります。この2つの画像が同じサイズの場合にのみ動作します。

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がありますが、グレー値をアルファとして選択します。ありがとうございました。 –

+0

@Mario Moralesこのアルゴリズムの仕事はありますが、実装するときは注意が必要です。大規模な画像を扱う場合、マルチスレッドの方法や可能な場合は最適化する方法を見つける必要があるからです。 – Burimi

+0

それはいくつかの変更を加えて動作します: 'Color.A'は書き込み可能ではないので、32bppの宛先イメージ' Bitmap outImage = new Bitmap(jpegFile.Width、jpegFile.Height、PixelFormat.Format32bppArgb); 'とにかく、画像をマージするのに数秒かかるので、私は最も効率的なアルゴリズムを探してみることにします(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'は透明ではありません。 –

関連する問題