Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# Windows Forms

Войти
Регистрация
Восстановить пароль
 
KOsTTTT
1 / 1 / 1
Регистрация: 23.10.2009
Сообщений: 17
#1

Неточность при выводе на печать - C#

17.02.2015, 16:50. Просмотров 301. Ответов 2
Метки нет (Все метки)

При выводе линии 5 см по горизонтали выводится точно, а по вертикали 4.9 см. Если по вертикали выводить длиннее линию, то погрешность накапливается.
В чем может быть проблема?
Вот кусок кода
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
           //___________создание буфера для метафайла________________
            using (MemoryStream stream = new MemoryStream())
            {
                using (Graphics screenBufferGraphics = this.CreateGraphics())
                {
                    float dpx = screenBufferGraphics.DpiX;
                    float dpy = screenBufferGraphics.DpiY;
                    IntPtr deviceContextHandle = screenBufferGraphics.GetHdc();
                    mwf = new Metafile(
                        stream,
                        deviceContextHandle,
                        new RectangleF(0, 0, (297 * dpx)/25.4), (297 * dpy)/25.4)),
                        MetafileFrameUnit.Pixel,
                        EmfType.EmfPlusDual);
                    screenBufferGraphics.ReleaseHdc();
                }
            }
 
            //________________________________________________________
            Graphics g1 = Graphics.FromImage(mwf);
 
          //  Console.WriteLine("Разрешение g1.DpiX  = " + g1.DpiX);//разрешение равно 96
            g1.SmoothingMode = SmoothingMode.HighQuality;
            g1.InterpolationMode = InterpolationMode.HighQualityBicubic;
            g1.PixelOffsetMode = PixelOffsetMode.HighQuality;
            g1.CompositingQuality = CompositingQuality.HighQuality;
            metafileHeader = mwf.GetMetafileHeader();
            g1.ScaleTransform(
              metafileHeader.DpiX / g1.DpiX,
              metafileHeader.DpiY / g1.DpiY);
 
            g1.PageUnit = GraphicsUnit.Pixel;
 
            Pen pen5 = new Pen(Color.FromArgb(70,0,0,0), 0.1f);//
            double iii;
            iii = (g1.DpiX/25.4) *50.0 + 100;
           // iii = 50 + 100;
            g1.DrawLine(pen5, 100f, 100f, (float)(iii), 100f);
            Console.WriteLine("Горизортальная черта"+iii);
            iii = (g1.DpiY / 25.4) * 50.0 + 100;
            g1.DrawLine(pen5, 100f, 100f, 100f, (float)iii);
            Console.WriteLine("Вертикальная черта" + iii);//Выводится такое же значение, как для горизонтальной
//линии
 
 
            pen5.Dispose();
 
 
            pictureBox1.Image = mwf;
            g1.Dispose();
Вот событие вывода на печать.
C#
1
2
3
4
5
        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            e.Graphics.DrawImage(mwf, new Point(0,0));
            e.Graphics.Dispose();
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2015, 16:50
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Неточность при выводе на печать (C#):

зависает при выводе на forms - C#
Доброго времени суток! Проблема в следующем: Имеется небольшой кусок программы static async Task<string> Page(string url) { ...

Формат строки при выводе из БД - C#
Здравствуйте! Из БД в datagridview вывожу данные, через SqlDataAdapter SqlDataAdapter da = new SqlDataAdapter(sql, con); ...

ListBox выдает при выводе результата - C#
Спрашивал уже про этот уже код (http://www.cyberforum.ru/windows-forms/thread1540677.html). Теперь не понимаю, почему ListBox1 и 2 выдает...

Ошибка при выводе Dictionary в DataGridView - C#
При попытке вывести Dictionary в DataGridView выводит ошибку - Индекс за пределами диапазона. Индекс должен быть положительным числом, а...

Форматная запись, при выводе в файл - C#
Есть документ из множества подобных значений, я его загружаю в richtextbox....

Изменение TextBox недоступно при выводе в цикле - C#
когда я ввожу что-то в textBox то после нажатии на кнопку он становится не доступным то есть поменять введенное уже нельзя! И еще как...

2
ViterAlex
6275 / 3479 / 1063
Регистрация: 11.02.2013
Сообщений: 7,664
Завершенные тесты: 3
18.02.2015, 03:40 #2
Может стоит использовать PageUnit.Display?
0
KOsTTTT
1 / 1 / 1
Регистрация: 23.10.2009
Сообщений: 17
18.02.2015, 17:07  [ТС] #3
А что с PageUnit.Display точнее получается? Такое перечисление есть для PageUnit, но нету для MetafileFrameUnit.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2015, 17:07
Привет! Вот еще темы с ответами:

Ошибка при выводе значения массива в listview - C#
Вопросик появился. Вот в классе я матрицы сложу, но значение нужно вывести в форме, пробовал выводить в ListView3 ( в первых двух ListView...

Форма подвисает при выводе на неё из других потоков - C#
Доброго времени суток, проблема такая: пишу прогу для АСУТП, которая должна считывать множество данных с устройства и выводить их. Для...

.NET 4.x Ошибка при выводе элементов массива в ячейки Excel - C#
При выводе в ячейки Excel элементов массива ошибка: An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred...

Порядковый номер в GridView при выводе инфы из текста - C#
Здравствуйте. Вывожу данные из файла в dataGridView таким вот образом: // массив данных из файла string arr =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru