2012-07-18 2 views
2

몇 가지 문제가 있습니다.PNG에서 BitmapImage로. 투명성 문제.

Bitmap bmp = Resource1.ResourceManager.GetObject(String.Format("_{0}",i)) as Bitmap; 
MemoryStream ms = new MemoryStream(); 
bmp.Save(ms, ImageFormat.Bmp); 
BitmapImage bImg = new BitmapImage(); 

bImg.BeginInit(); 
bImg.StreamSource = new MemoryStream(ms.ToArray()); 
bImg.EndInit(); 

this.Image = bImg; 

을하지만 그것을 할 때, 나는 이미지의 투명도를 잃게 : 나는이처럼 내 뷰 모델에 BitmapImage의 때에 프로퍼티에 자원에서 PNG 이미지를로드하기 위해 노력하고있어. 그래서 투명도를 잃지 않고 리소스에서 png 이미지를로드 할 수 있습니까? 감사합니다. Pavel.

+1

@Felice Pollano : 삭제 된 답변을 복원해야합니다. 이미지를 .bmp 파일로 저장하고로드하면 분명히 투명성이 떨어집니다. –

답변

0

이것은 일반적으로 BitmapImage이 지원하지 않는 64 비트 심도 PNG 이미지로 인해 발생합니다. Photoshop에서이를 16 비트로 잘못 표시하는 것 같습니다. Windows 탐색기로 확인해야합니다.

  • 파일을 마우스 오른쪽 버튼으로 클릭하십시오.
  • 속성을 클릭하십시오.
  • 세부 정보 탭으로 이동하십시오.
  • "비트 깊이"를 찾으십시오. 일반적으로 너비와 높이가있는 이미지 섹션에 있습니다.

64라고하면 16 비트 심도로 이미지를 다시 인코딩해야합니다. Paint.NET을 사용하는 것이 좋습니다. PNG 비트 깊이를 올바르게 처리하기 때문입니다.

2

파일 형식이 PNG 일 때 BMP 파일 형식이 투명도를 지원하지 않기 때문입니다. 투명성을 원하면 PNG을 사용해야합니다.

저장을 위해 ImageFormat.Png을 시도하십시오.

0

나는이 게시물을보고 여기와 같은 투명성 문제에 대한 답변을 찾아 보았습니다.

그러나 예제 코드를 보았고 리소스에서 이미지를로드하기 위해이 코드를 공유하기를 원했습니다.

Image connection = Resources.connection; 

이것을 사용하면 이미지를 16 비트로 다시 코딩 할 필요가 없습니다. 감사.

3

리아의 대답은 투명성 문제를 해결하는 데 도움이되었습니다. 나를 위해 작동하는 코드는 다음과 같습니다.

public BitmapImage ToBitmapImage(Bitmap bitmap) 
{ 
    using (MemoryStream stream = new MemoryStream()) 
    { 
    bitmap.Save(stream, ImageFormat.Png); // Was .Bmp, but this did not show a transparent background. 

    stream.Position = 0; 
    BitmapImage result = new BitmapImage(); 
    result.BeginInit(); 
    // According to MSDN, "The default OnDemand cache option retains access to the stream until the image is needed." 
    // Force the bitmap to load right now so we can dispose the stream. 
    result.CacheOption = BitmapCacheOption.OnLoad; 
    result.StreamSource = stream; 
    result.EndInit(); 
    result.Freeze(); 
    return result; 
    } 
}