- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想绘制大量形状(直线、椭圆和...),然后将它们保存为位图或 png。我画了图,问题是:如何在 C# 中将 DrawingImage 转换为 BitmapImage?代码是这样的:
DrawingGroup drawingGroup = new DrawingGroup();
using(DrawingContext context = drawingGroup.Open())
{
//make some drawing
}
DrawingImage drawingImage = new DrawingImage(drawingGroup)
// your suggestion? DrawingImage - > BitmapImage
最佳答案
您可以将 ImageDrawing 放入 Image 控件中并将其渲染到 RenderTargetBitmap 中,它是一个 BitmapSource,因此可以由 BitmapEncoder 序列化。 (本例中为 PngBitmapEncoder)。
public void SaveDrawingToFile(Drawing drawing, string fileName, double scale)
{
var drawingImage = new Image { Source = new DrawingImage(drawing) };
var width = drawing.Bounds.Width * scale;
var height = drawing.Bounds.Height * scale;
drawingImage.Arrange(new Rect(0, 0, width, height));
var bitmap = new RenderTargetBitmap((int)width, (int)height, 96, 96, PixelFormats.Pbgra32);
bitmap.Render(drawingImage);
var encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmap));
using (var stream = new FileStream(fileName, FileMode.Create))
{
encoder.Save(stream);
}
}
请注意,您实际上不需要 BitmapImage 进行编码,因为 BitmapSource(或任何派生类,如 RenderTargetBitmap)将被接受为 BitmapFrame.Create 的参数。 .
稍微不同的解决方案将涉及 DrawingVisual而不是绘图图像:
public void SaveDrawingToFile(Drawing drawing, string fileName, double scale)
{
var drawingVisual = new DrawingVisual();
using (var drawingContext = drawingVisual.RenderOpen())
{
drawingContext.PushTransform(new ScaleTransform(scale, scale));
drawingContext.PushTransform(new TranslateTransform(-drawing.Bounds.X, -drawing.Bounds.Y));
drawingContext.DrawDrawing(drawing);
}
var width = drawing.Bounds.Width * scale;
var height = drawing.Bounds.Height * scale;
var bitmap = new RenderTargetBitmap((int)width, (int)height, 96, 96, PixelFormats.Pbgra32);
bitmap.Render(drawingVisual);
var encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmap));
using (var stream = new FileStream(fileName, FileMode.Create))
{
encoder.Save(stream);
}
}
关于c# - 将 DrawingImage 转换为 BitmapImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14387350/
我试图在 XAML 中包含一些格式化文本作为绘图的一部分。这可能吗?它是如何完成的? 示例: 最佳答案
我们的应用程序已通过 DrawingImage 范例转换为使用矢量图像。我想在 DrawingImage 变量中制作颜色/画笔,但没有成功。 为什么:我这样做的原因是我们在应用程序中使用主题,我想在主
我们需要使某些矢量图形图像在运行时改变图形中某些元素的颜色。似乎基于静态或动态资源值设置这些颜色是行不通的。我们希望拥有同一个图形的多个版本,每个版本都能够将某些图形元素(路径、线条等)设置为不同的颜
我想绘制大量形状(直线、椭圆和...),然后将它们保存为位图或 png。我画了图,问题是:如何在 C# 中将 DrawingImage 转换为 BitmapImage?代码是这样的: DrawingG
看图。我希望中间线是一条清晰的 1 像素线。您可以将示例标记复制并粘贴到 kaxaml 中。 alt text http://img832.imageshack.us/img832/1704/line
我正在尝试将 DrawingImage 转换为 MemoryStream。我的代码如下所示: public MemoryStream ImageStream(DrawingImage drawingI
我有一个关于使用 Javonet 的问题。在 .NET 代码中,我有一个方法返回一个System.DrawingImage 并且我必须在代码的 Java 端获取它。所以当我通过 Javonet API
我是一名优秀的程序员,十分优秀!