Чтобы сделать снимок изображения в нужном размере по умолчанию, он должен иметь правильную комбинацию dpi
и пикселей.
Давайте посмотрим на пример:
// aiming at 150dpi and 4x6 inches:
float dpi = 150;
float width = 4;
float height = 6;
using (Bitmap bmp = new Bitmap((int)(dpi * width), (int)(dpi * height)))
{
// first set the resolution
bmp.SetResolution(dpi, dpi);
// then create a suitable Graphics object:
using (Graphics G = Graphics.FromImage(bmp))
using (Pen pen = new Pen(Color.Orange))
{
pen.Alignment = System.Drawing.Drawing2D.PenAlignment.Center;
G.Clear(Color.FloralWhite);
// using pixels here:
Size sz = new System.Drawing.Size((int)dpi * 2 - 1, (int)dpi * 2 - 1);
G.DrawRectangle(pen, new Rectangle(new Point(0, 0), sz));
G.DrawRectangle(pen, new Rectangle(new Point(0, 300), sz));
G.DrawRectangle(pen, new Rectangle(new Point(0, 600), sz));
G.DrawRectangle(pen, new Rectangle(new Point(300, 0), sz));
G.DrawRectangle(pen, new Rectangle(new Point(300, 300), sz));
G.DrawRectangle(pen, new Rectangle(new Point(300, 600), sz));
// alternative code:
// we can also set the Graphics object to measure stuff in inches;
G.PageUnit = GraphicsUnit.Inch;
// or fractions of it, let's use 10th:
G.PageScale = 0.1f;
using (Pen pen2 = new Pen(Color.MediumPurple, 1f/dpi * G.PageScale))
{
// draw one rectangle offset by an inch:
G.DrawRectangle(pen2, 10f, 10f, 20f, 20f);
}
bmp.Save(@"D:\xxx.jpg", ImageFormat.Jpeg);
}
}
Обратите внимание, что я должен был вычесть 1 пиксель из нарисованного размера, как DrawRectangle
overdraws на 1 пиксель!
Обратите внимание, что координаты рисую в зависимости от разрешения! Также обратите внимание, как формат jpeg создает много размазанных цветов. Png
создает более четкие результаты, особенно после того, как вы печатаете текст.
Также обратите внимание, как мне пришлось уменьшать PenWidth
в альтернативном коде!
Все зависит от установки DPI (точек на дюйм) на вашем принтере. Когда вы отправляете документ для печати, вы должны указать DPI, который вы хотите, чтобы это стало проще. В принципе, если у вас есть принтер с разрешением 100 dpi, то вы хотите нарисовать прямоугольник 2000 x 2000 (20 x 100) ... конечно, вам понадобится бумага, достаточно большая для этого. Ваш стандартный A4 не подходит для него – musefan
@musefan Извините, это было 2X2 дюйма. – techno
ha, ну просто пересчитать тогда ... [Установка DPI] x [Длина в дюймах] = [Число пикселей] – musefan