BitmapSource
개체를 이미지 파일에 저장하는 작은 유틸리티 클래스를 작성했습니다. 이미지 파일은 bmp, jpeg 또는 png 일 수 있습니다. 여기 코드는 다음과 같습니다 BitmapSource를 WPF의 bmp, jpeg 및 png로 저장할 때 완전히 다른 결과가 나타나는 이유
public class BitmapProcessor
{
public void SaveAsBmp(BitmapSource bitmapSource, string path)
{
Save(bitmapSource, path, new BmpBitmapEncoder());
}
public void SaveAsJpg(BitmapSource bitmapSource, string path)
{
Save(bitmapSource, path, new JpegBitmapEncoder());
}
public void SaveAsPng(BitmapSource bitmapSource, string path)
{
Save(bitmapSource, path, new PngBitmapEncoder());
}
private void Save(BitmapSource bitmapSource, string path, BitmapEncoder encoder)
{
using (var stream = new FileStream(path, FileMode.Create))
{
encoder.Frames.Add(BitmapFrame.Create(bitmapSource));
encoder.Save(stream);
}
}
}
세 Save
방법의 각
Image
컨트롤을 사용하여 화면에
BitmapSource
을 표시하면 내가 본 것의 정확한 재현을 생성하는 유일한 형식입니다. 여기
결과이다 :
BMP-너무 어두운
too dark http://img822.imageshack.us/img822/7403/terrainbmp.png JPEG- 너무 포화
too saturated http://img816.imageshack.us/img816/8127/terrainjpeg.jpg
PNG - 다른 파일 형식의 올바른
correct http://img810.imageshack.us/img810/6243/terrainpng.png
하는 이유는 무엇입니까 완전히 다른 결과?
필자의 예제에서 BitmapSource
은 0.1의 알파 값을 사용한다는 점에 유의해야하지만 (결과적으로 매우 흐릿한 것으로 나타남) 결과 색상을 모든 이미지 형식으로 표시 할 수 있어야합니다. 나는 HyperSnap과 같은 것을 사용하여 화면 캡처를하면, 내가 저장하는 파일 유형에 상관없이 올바르게 보일 것입니다.
correct http://img815.imageshack.us/img815/9966/terrainbmphypersnap.png
당신이 볼 수 있듯이, 이것은 문제가되지 않습니다, 그래서 WPF의 이미지 인코더에 대한 이상한 일이 분명히있다 :
는 여기 BMP로 저장된 HyperSnap 화면 캡처입니다.
설정이 잘못 되었습니까? 내가 놓친 게 있니?
이러한 이미지를 메모리에 저장 한 다음 저장하고 있습니까? 또는 디스크 로딩 된 이미지에서 가져온 것입니까? –
@Adam이 이미지는'RenderTargetBitmap.Render (UIElement)'를 사용하여 메모리 내 (화면 상)'Viewport3D'에서 캡처됩니다. – devuxer