Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Печать PictureBox


Автор: kuller 3.5.2008, 10:34
Расскажите пожалуйста как распечатать содержимое PictureBox. К примеру в нем находиться изображение. Как мне распечатать его?
Код

 // показываем окно настройки печати
                PrintDocument printDoc = new PrintDocument();
                PrintDialog dlg = new PrintDialog();
                dlg.Document = printDoc;
                if (dlg.ShowDialog() != DialogResult.Cancel)
                {
                   Я нашел на форуме такой вот элемент печати, но незнаю что вот сюда вставить пробывал разные варианты не прокатило, помогите кто знает как это сделать.
                    printDoc.Print();
                }

Автор: mr.DUDA 3.5.2008, 12:01
Код
        void РаспечататьПикчербокс()
        {
            // показываем окно настройки печати
            PrintDocument printDoc = new PrintDocument();
            PrintDialog dlg = new PrintDialog();
            dlg.Document = printDoc;
            if (dlg.ShowDialog() != DialogResult.Cancel)
            {
                printDoc.PrintPage += new PrintPageEventHandler(printDoc_PrintPage);
                printDoc.Print();
            }
        }

        void printDoc_PrintPage(object sender, PrintPageEventArgs e)
        {
            e.Graphics.DrawImage(pictureBox1.Image, Point.Empty);
        }

Автор: kuller 3.5.2008, 12:17
mr.DUDA, ОГРОМНОЕ СПАСИБО .... работает, а можно, точнее есть там какое то свойство чтобы ИЗОБРАЖЕНИЕ печаталось на листке не как он иедет стоя а как на АЛЬБОМНОМ ... ну как изображение обычно????

Автор: mr.DUDA 3.5.2008, 16:02
Повернуть картинку можно так:
Код
e.Graphics.RotateTransform(90);
e.Graphics.DrawImage(pictureBox1.Image, Point.Empty);

Угол поворота можно менять, так же как и смещение от угла листа до края картинки (передав его вместо Point.Empty). Если нужно масштаб изменить, можно воспользоваться другой версией метода DrawImage, принимающей Rectangle.

Автор: kuller 4.5.2008, 19:14
mr.DUDA,  Огромное спасибо)

Добавлено через 9 минут и 35 секунд
Во приколы 
Когда было вот так
Код

//Печать изображения
        private void печатьИзображенияToolStripMenuItem_Click(object sender, EventArgs e)
        {
                // показываем окно настройки печати
                PrintDocument printDoc = new PrintDocument();
                PrintDialog dlg = new PrintDialog();
                dlg.Document = printDoc;
                if (dlg.ShowDialog() != DialogResult.Cancel)
                {
                    printDoc.PrintPage += new PrintPageEventHandler(printDoc_PrintPage);
                    printDoc.Print();
                }
        }
        
        void printDoc_PrintPage(object sender, PrintPageEventArgs e)
        {
            e.Graphics.DrawImage(pictureBox1.Image, 20,20); //Point.Empty
        }

ВСЕ ПЕЧАТАЛОСЬ а вот потом изменил одну строчку добавил насчет поворота
Код

//Печать изображения
        private void печатьИзображенияToolStripMenuItem_Click(object sender, EventArgs e)
        {
                // показываем окно настройки печати
                PrintDocument printDoc = new PrintDocument();
                PrintDialog dlg = new PrintDialog();
                dlg.Document = printDoc;
                if (dlg.ShowDialog() != DialogResult.Cancel)
                {
                    printDoc.PrintPage += new PrintPageEventHandler(printDoc_PrintPage);
                    printDoc.Print();
                }
        }
        
        void printDoc_PrintPage(object sender, PrintPageEventArgs e)
        {
            e.Graphics.RotateTransform(90);
            e.Graphics.DrawImage(pictureBox1.Image, 20,20); //Point.Empty
        }

ПЕРЕСТАЛО ПЕЧАТАТЬ))))

Автор: mr.DUDA 5.5.2008, 10:48
kuller, может оно вылазит за границы области печати, попробуй угол поменять например на -90.

Автор: kuller 5.5.2008, 11:16
mr.DUDA, ЛОГИЧНО))))
Сейчас попробую))))
Точно непонятно же в какую сторону он повернул на 90 градусов)))

Добавлено через 9 минут и 9 секунд
mr.DUDA, не что то тут не то ....
-90 пробывал 
270 пробывал 
некатит
значит дело в чем то другом(

Автор: mr.DUDA 5.5.2008, 16:13
Видать нужно ещё сместить начало координат к центру вращения. Методом тыка подобрал нужную комбинацию трансформаций:
Код
            e.Graphics.TranslateTransform(_pictureBox.Image.Height, 0);
            e.Graphics.RotateTransform(90);
            e.Graphics.DrawImage(pictureBox1.Image, Point.Empty);


Потренироваться можно, добавив на форму панель, подписавшись на её событие Paint и вставив туда аналогичный код.

Автор: kuller 5.5.2008, 17:36
mr.DUDA, Спасибо)))
Я методом тыка вот подобрал что:
Код

void printDoc_PrintPage(object sender, PrintPageEventArgs e)
        {
            e.Graphics.TranslateTransform(pictureBox1.Image.Height, 0);
            e.Graphics.RotateTransform(90);
            e.Graphics.DrawImage(pictureBox1.Image, 10,-450);
        }

Так он печатает ГОРИЗОНТАЛЬНО и почти от верхнего левого угла)))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)