2011-09-09 5 views
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

확인의 당신이 JPEG Picute와 알파 채널을 가진 PNG로 이미지가 있다고 가정하자. 이 작업을 수행해야하며 두 이미지가 같은 크기 인 경우에만 작동합니다.

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);가 필요하고'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'는 투명도와 관련이 없다. –

관련 문제