SVG 파일을 다른 형식으로 일괄 변환하기 위해 SVG # (http://sharpvectors.codeplex.com/)을 사용하고 있습니다. 변환중인 SVG 이미지는 배경이없는 검은 색 선 그림입니다. WPF 또는 System.Windows.Media 네임 스페이스에 대한 경험이 거의 없으므로 기본 질문 인 경우 실례합니다.BmpBitmapEncoder를 사용하여 Windows.Media.Drawing 저장 black image - 알파를 제거하는 방법?
나는 다음 원하는 파일 형식으로 수출하는 System.Windows.Media
인코더 (BmpBitmapEncoder
, PngBitmapEncoder
등)를 사용하여 변환 된 System.Windows.Media.Drawing
객체를 받아 SVG 번호에서 ImageSvgConverter의 수정 된 버전을 사용하고 있습니다.
TiffBitmapEncoderor
, PngBitmapEncoder
또는 GifBitmap
중 하나를 사용하여 내보낼 때 이미지가 예상대로 생성됩니다. 생성 된 이미지는 모두 투명한 배경을가집니다.
그러나 JpegBitmapEncoder
또는 BmpBitmapEncoder
을 사용하여 내보낼 때 모든 이미지가 검은 색으로 표시됩니다. tif, png 및 gif는 모두 배경이 투명하기 때문에 jpg/bmp 이미지가 올바르게 그려지는 것으로 생각되지만 알파가 이러한 파일 형식에서는 지원되지 않으므로 검정 출력은 투명도가 해석 될 때 의미가 있습니다. 아무것도/검은 색으로.
이 게시물에 설명 된 것과 같습니다 Strange bmp black output from BitmapSource - any ideas?, Convert Transparent PNG to JPG with Non-Black Background Color 및 Background Turns Black When Saving Bitmap - C#.
그러나 솔루션을 적용하는 방법을 볼 수없는 것은 내 문제의 게시물입니다. 누구든지 올바른 방향으로 나를 가리킬 수 있습니까?
흰색 SolidColorBrush를 DrawingContext의 PushOpacityMask 메서드에 적용하려고 시도했지만 아무런 차이가 없습니다.
정말 감사합니다.
private Stream SaveImageFile(Drawing drawing)
{
// black output
BitmapEncoder bitmapEncoder = new BmpBitmapEncoder();
// works
//bitmapEncoder = new PngBitmapEncoder();
// The image parameters...
Rect drawingBounds = drawing.Bounds;
int pixelWidth = (int)drawingBounds.Width;
int pixelHeight = (int)drawingBounds.Height;
double dpiX = 96;
double dpiY = 96;
// The Visual to use as the source of the RenderTargetBitmap.
DrawingVisual drawingVisual = new DrawingVisual();
DrawingContext drawingContext = drawingVisual.RenderOpen();
// makes to difference - still black
//drawingContext.PushOpacityMask(new SolidColorBrush(System.Windows.Media.Color.FromRgb(255,255,255)));
drawingContext.DrawDrawing(drawing);
drawingContext.Close();
// The BitmapSource that is rendered with a Visual.
RenderTargetBitmap targetBitmap = new RenderTargetBitmap(pixelWidth, pixelHeight, dpiX, dpiY, PixelFormats.Pbgra32);
targetBitmap.Render(drawingVisual);
// Encoding the RenderBitmapTarget as an image file.
bitmapEncoder.Frames.Add(BitmapFrame.Create(targetBitmap));
MemoryStream stream = new MemoryStream();
bitmapEncoder.Save(stream);
stream.Position = 0;
return stream;
}
나무가 나무를 볼 수 없었습니다! 완벽하게 일했고, 많이 감사했습니다. – Jack