Hallo,
gibt es in C# eine Möglichkeit, ein Screenshot einer Canvas-Komponente mit seinen Inhalten zu erstellen? Dieses soll auf ein Image- oder ImageBrush-Objekt angewendet werden.
Hm, da hab ich schonmal was gemacht. Das schaut in etwa so aus (ich habs auch ergooglet 😉 ).
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Forms;
[...]
void button1_Click(object sender, RoutedEventArgs e)
{
WriteFile(@"D:\Temp\test01.jpg");
}
private void WriteFile(string path){
byte[] data = null;
data = GetJpgImage(Clock,1,100); // Clock müsste alles sein können, was UIElement implementiert
FileStream stream = new FileStream(path, FileMode.OpenOrCreate);
foreach (byte digit in data ){
stream.WriteByte(digit);
}
stream.Close();
}
public static byte[] GetJpgImage(UIElement source, double scale, int quality)
{
double actualHeight = source.RenderSize.Height;
double actualWidth = source.RenderSize.Width;
double renderHeight = actualHeight * scale;
double renderWidth = actualWidth * scale;
RenderTargetBitmap renderTarget = new RenderTargetBitmap((int) renderWidth, (int) renderHeight, 96, 96, PixelFormats.Pbgra32);
VisualBrush sourceBrush = new VisualBrush(source);
DrawingVisual drawingVisual = new DrawingVisual();
DrawingContext drawingContext = drawingVisual.RenderOpen();
using (drawingContext)
{
drawingContext.PushTransform(new ScaleTransform(scale, scale));
drawingContext.DrawRectangle(sourceBrush, null, new Rect(new Point(0, 0), new Point(actualWidth, actualHeight)));
}
renderTarget.Render(drawingVisual);
JpegBitmapEncoder jpgEncoder = new JpegBitmapEncoder();
jpgEncoder.QualityLevel = quality;
jpgEncoder.Frames.Add(BitmapFrame.Create(renderTarget));
Byte[] _imageArray;
using (MemoryStream outputStream = new MemoryStream())
{
jpgEncoder.Save(outputStream);
_imageArray = outputStream.ToArray();
}
return _imageArray;
}
[...]
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.