2012-03-12 3 views
6

업로드 된 투명 .png 파일을 SQL Server 데이터베이스에 삽입하고 HttpHandler를 통해 웹 페이지에 표시하는 기능을 만들었습니다.PNG 투명도를 유지하는 방법은 무엇입니까?

이 모든 것이 작동하는 동안 웹 페이지에서 볼 때 png 투명도가 검은 색으로 변경됩니다. 투명성을 유지할 수있는 방법이 있습니까?

public void AddImage(int productId, string caption, byte[] bytesOriginal) 
{ 
    string jpgpattern = ".jpg|.JPG"; 
    string pngpattern = ".png|.PNG"; 
    string pattern = jpgpattern; 

    ImageFormat imgFormat = ImageFormat.Jpeg; 

    if (caption.ToLower().EndsWith(".png")) 
    { 
    imgFormat = ImageFormat.Png; 
    pattern = pngpattern; 
    } 

    ProductImage productImage = new ProductImage(); 
    productImage.ProductId = productId; 
    productImage.BytesOriginal = bytesOriginal; 
    productImage.BytesFull = Helpers.ResizeImageFile(bytesOriginal, 600, imgFormat); 
    productImage.BytesPoster = Helpers.ResizeImageFile(bytesOriginal, 198, imgFormat); 
    productImage.BytesThumb = Helpers.ResizeImageFile(bytesOriginal, 100, imgFormat); 
    productImage.Caption = Common.RegexReplace(caption, pattern, ""); 

    productImageDao.Insert(productImage); 
} 

을 그리고 여기에 "ResizeImageFile"도우미 함수이다 : 나는을 유지하기 위해 어떻게해야합니까 무엇

public static byte[] ResizeImageFile(byte[] imageFile, int targetSize, ImageFormat imageFormat) 
{ 
    using (System.Drawing.Image oldImage = System.Drawing.Image.FromStream(new MemoryStream(imageFile))) 
    { 
     Size newSize = CalculateDimensions(oldImage.Size, targetSize); 
     using (Bitmap newImage = new Bitmap(newSize.Width, newSize.Height, PixelFormat.Format24bppRgb)) 
     { 
      using (Graphics canvas = Graphics.FromImage(newImage)) 
      { 
      canvas.SmoothingMode = SmoothingMode.AntiAlias; 
      canvas.InterpolationMode = InterpolationMode.HighQualityBicubic; 
      canvas.PixelOffsetMode = PixelOffsetMode.HighQuality; 
      canvas.DrawImage(oldImage, new Rectangle(new Point(0, 0), newSize)); 
      MemoryStream m = new MemoryStream(); 
      newImage.Save(m, imageFormat); 
      return m.GetBuffer(); 
      } 
     } 
    } 
} 

다음은 MVC 컨트롤러에서 데이터베이스에 삽입 내 이미지 서비스입니다 PNG 투명도? 예를 보여주십시오. 나는 심각하게 이미지 조작 전문가는 아니야.

감사합니다.

+2

'Format32bppArgb'를 사용하여 알파 ('A')를 유지하십시오. –

+0

질문 제목 앞에 "C#"또는 이와 유사한 접두어를 붙이지 마십시오. 이것이 바로 태그가있는 것입니다. –

+0

원본 .png이 8 비트인지 또는 풀 컬러인지 알고 있습니까? –

답변

5

픽셀 형식을 PixelFormat.Format24bppRgb에서 PixelFormat.Format32bppRgb로 변경해보십시오. 알파 채널을 유지하려면 추가 8 비트가 필요합니다.

+0

PixelFormat.Format32bppRgb가 아닌 PixelFormat.Format32bppArgb 여야합니다. 설명문에 따르면 8 비트가 사용되지 않기 때문입니다. – bafsar

3

사용 PixelFormat.Format32bppRgb은 저에게 적합하지 않았습니다. 그러나 새로운 이미지를 그릴 때 oldImage.PixelFormat을 사용하면 효과적이었습니다. 해당 코드 줄은 다음과 같습니다.

using (Bitmap newImage = new Bitmap(newSize.Width, newSize.Height, oldImage.PixelFormat)) 
관련 문제