Savecanvastobitmap我想将画布保存为位图。我在互联网上找到了一些示例,但它们都只保存黑色图像(我的画布大小)。我该怎么做?代码:publicstaticvoidSaveCanvasToFile(Canvassurface,stringfilename){表面。测量(尺寸);surface.Arrange(新矩形(尺寸));//创建渲染位图并将表面推送给它RenderTargetBitmaprenderBitmap=newRenderTargetBitmap((int)size.Width,(int)size.Height,96d,96d,PixelFormats.Pbgra32);renderBitmap.Render(surface);//创建用于保存图像的文件流使用(FileStreamoutStream=newFileStream(filename,FileMode.Create)){BmpBitmapEncoderencoder=newBmpBitmapEncoder();//将渲染的位图推送给它encoder.Frames.Add(BitmapFrame.Create(renderBitmap));//将数据保存到流中encoder.Save(outStream);}}试试这个答案:publicvoidExportToPng(Uripath,Canvassurface){if(path==null)return;//保存当前画布变换Transformtransform=surface.LayoutTransform;//重置当前变换(如果缩放或旋转)surface.Lay输出转换=空;//获取画布大小Sizesize=newSize(surface.Width,surface.Height);//测量和布置表面//非常重要surface.Measure(size);surface.Arrange(新矩形(尺寸));//创建渲染位图并将表面推送给它RenderTargetBitmaprenderBitmap=newRenderTargetBitmap((int)size.Width,(int)size.Height,96d,96d,PixelFormats.Pbgra32);renderBitmap.Render(surface);//创建用于保存图像的文件流使用(FileStreamoutStream=newFileStream(path.LocalPath,FileMode.Create)){//为我们的数据使用png编码器PngBitmapEncoderencoder=newPngBitmapEncoder();//将渲染的位图推送给它encoder.Frames.Add(BitmapFrame.Create(renderBitmap));//将数据保存到流中encoder.Save(outStream);}//恢复之前保存的布局surface.LayoutTransform=transform;}为方方便起见,此页上面复制了此答案在我的渲染代码中,我调用了target.UpdateLayout();在target.Arrange(newRect(size));之后在target.Arrange(newRect(size));之后,也许这会解决它。另请注意,如果您不设置画布背景,它将呈现透明,而对BMP进行编码可能会使其变为纯黑色,因此如果您只有黑色对象,它们可能不可见。var文件名="img.jpg";varbitMap=newWriteableBitmap(DrawCanvas,null);varms=newMemoryStream();System.Windows.Media.Imaging.Extensions.SaveJpeg(bitMap,ms,bitMap.PixelWidth,bitMap.PixelHeight,0,100);ms.Seek(0,SeekOrigin.Begin);varlibrary=newMediaLibrary();library.SavePicture(string.Format("{0}",fileName),ms);请注意,如果您是黑色图像,那是因为您的尺寸不正确。这是一个很好的例子:RenderTargetBitmaprtb=newRenderTargetBitmap(width,height,mXdpi,mYdpi,System.Windows.Media.PixelFormats.Default);rtb.Render(my_canvas);BitmapEncoderpngEncoder=newPngBitmapEncoder();png编码器。Frames.Add(BitmapFrame.Create(rtb));使用(varfs=System.IO.File.OpenWrite("test.png")){pngEncoder.Save(fs);此代码从您的画布中呈现位将png图像保存在图中。希望这可以帮助。尝试将画布的背景颜色设置为白色。以上就是C#学习教程:将画布保存为位图分享所有内容。如果对你有用,需要了解更多C#学习教程,希望大家多加关注——本文来自网络收集,不代表立场,如涉及侵权,请点击有权联系管理员删除。如需转载请注明出处:
