Сохранение холста в BMP только для желаемого размера холста
У меня есть холст с различными объектами в нем, можно перемещать вокруг..
Затем я хочу сохранить холст в BMP или PNG .. нет проблем, это работает.
Но если есть какой-то объект за пределами холста, выходное изображение будет с желаемым размером холста, но внутри внешних элементов.
Я хочу напечатать точно нужный размер, не больше и не меньше..:)
Я думаю, что это мера и организовать проблему, но не понял, как это работает..
следуя коду и образу примера "экспорта плохих изображений"!
public class Graphic_area : Canvas
{
private void SaveCanvas (string filename, bool bmp = false, int dpi = 96)
{
Size size = new Size(this.Width, this.Height);
this.Measure(size);
this.Arrange(new Rect(size));
RenderTargetBitmap rtb = new RenderTargetBitmap((int)(this.Width * dpi / 96.0),
(int)(this.Height * dpi / 96.0),
dpi,
dpi,
PixelFormats.Default);
DrawingVisual dv = new DrawingVisual();
using (DrawingContext ctx = dv.RenderOpen())
{
VisualBrush vb = new VisualBrush(this);
ctx.DrawRectangle(vb, null, new Rect(new Point(), size));
}
rtb.Render(dv);
if (bmp)
{
SaveRTBAsBMP(rtb, filename);
}
else
{
SaveRTBAsPNG(rtb, filename);
}
}
private void SaveRTBAsBMP (RenderTargetBitmap bmp, string filename)
{
BitmapEncoder encoder = new BmpBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bmp));
using (var stm = System.IO.File.Create(filename))
{
encoder.Save(stm);
}
// remove alpha channel !
System.Drawing.Bitmap orig = new System.Drawing.Bitmap(filename);
System.Drawing.Bitmap clone = new System.Drawing.Bitmap(orig.Width, orig.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
using (System.Drawing.Graphics gr = System.Drawing.Graphics.FromImage(clone))
{
gr.DrawImage(orig, new System.Drawing.Rectangle(0, 0, clone.Width, clone.Height));
}
orig.Dispose();
clone.Save(filename, System.Drawing.Imaging.ImageFormat.Bmp);
}
}
все на правой стороне вертикальной белой линии не должно быть на картинке!