Печать рисунков

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
GRS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 186
Зарегистрирован: 29.02.2004 (Вс) 22:23
Откуда: Казахстан, Алматы

Печать рисунков

Сообщение GRS » 26.10.2004 (Вт) 18:27

Привет! :D

Рад Вас снова видеть!!! :wink:

Сложность в этот раз заключается вот в чем: надо печатать рисунок. Изображение от силы 2-3 kb. Я печатаю напрямую, т.е.
Код: Выделить всё
OPEN LPTn for OUTPUT as #n

Текст печатается, ESC-команды понимаются. Но, вот, как печатать картинки? :shock:

Кто подскажет? :?

Спасибо!!!
Встану рано утром, выпью чашку ртути... Всё равно я сдохну в этом институте...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 26.10.2004 (Вт) 18:29

:shock: :shock: :shock:
Щас, отойду, потом скажу...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

GRS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 186
Зарегистрирован: 29.02.2004 (Вс) 22:23
Откуда: Казахстан, Алматы

Сообщение GRS » 27.10.2004 (Ср) 4:41

Никто не подскажет?! Неужели не сталкивались?! :shock: :shock: :shock:
Может вопрос непонятно задал?... :roll: :?:
Встану рано утром, выпью чашку ртути... Всё равно я сдохну в этом институте...

Oxygen
Белая и пушистая
Белая и пушистая
Аватара пользователя
 
Сообщения: 1314
Зарегистрирован: 15.07.2003 (Вт) 7:14
Откуда: Москва

Сообщение Oxygen » 27.10.2004 (Ср) 8:04

Как вариант, натягиваешь рисунок свой на форму, ставишь форму определенного размера, или закидываешь в image, а потом ровняешь форму по нему, и есть такой метод form.Print. то самое примитивное, что бы не заморачиваться. А вообще, есть такой объект -Printer, от сюда и шагай.
Процедура клонирования завершена.
Коррекция имплантированного сознания соответствует принятым алгоритмам.
Уникальный идентификатор скопирован в чип временного паспорта.
Активация прав гражданина ожидается в течение 24 часов

YB
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 21.10.2004 (Чт) 7:17
Откуда: Н.Новгород

Сообщение YB » 27.10.2004 (Ср) 9:07

Объявляем функцию

Declare Function BitBlt& Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long)

Вставляй куда надо для вывода, только scalemode=3. Должно работать, давно не занимался. Если не работает поищи в MSDN или Инете.

BitBlt printer.hdc, 0, 0, printer.scaleWidth, printer.scaleHeight, picture1.hdc, 0, 0, &HCC0020

:D

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 27.10.2004 (Ср) 10:18

А чем Printer.PaintPicture плох? Он вдобавок и масштабирование реализует.

Только я так понял, что человеку необходимо реализовать печать не через виндовый драйвер печати, а напрямую, отправкой ESC-команд на порт.
Если так, то изучай спецификации принтера. Сама команда (печати графики) это ESC ( G (выбрать графический режим) в ESC * или ESC . c v hm.
Тут мануал по командам на русском языке.
Lasciate ogni speranza, voi ch'entrate.

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 27.10.2004 (Ср) 10:50

Вот именно:
Код: Выделить всё
    w = Picture1.Picture.Width
    h = Picture1.Picture.Height
    Printer.PaintPicture Picture1.Picture, 0, 0, w, h, 0, 0, w, h, vbSrcCopy

Интересно, а афтору принципиально печатать напрямую :?

GRS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 186
Зарегистрирован: 29.02.2004 (Вс) 22:23
Откуда: Казахстан, Алматы

Сообщение GRS » 27.10.2004 (Ср) 11:35

Тякс!... :shock:

Парни, что касаемо вопроса о "печати напрямую" - то тут нет вариантов. Принтер этот чековый и ESC команды кое-какие у меня на него есть. Точнее, он совместим с EPSON. Драйвера на него нет. Обрезать бумагу встроенным резаком я научился. Все шлю напрямую и вроде как проходит. Но вот что касается картинок, тут я зашел в тупик.
Собственно, варианты с объектом Printer заведомо не подходят.
Давайте еще варианты рассмотрим?
alibek - :wink: спасибо, буду смотреть...

Тема не закрыта, уважаемые! :shock:
Встану рано утром, выпью чашку ртути... Всё равно я сдохну в этом институте...

Scuder
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 334
Зарегистрирован: 17.08.2002 (Сб) 13:18
Откуда: Moscow, Russia

Сообщение Scuder » 27.10.2004 (Ср) 12:06

Сама команда (печати графики) это ESC ( G (выбрать графический режим) в ESC * или ESC . c v hm


Вот как перевести принтер в графический режим - понятно. А как в него картинку послать? :?

Сам долго парился со STAR TUP 9xx. В итоге забил на эту идею.. :-(

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 27.10.2004 (Ср) 12:10

Смотришь документацию к принтеру и то, каким образом в него передается растр. Обычно это битовая маска, т.е. конвертируешь (программно) изображение в черно-белую (1 бит) картинку, разбиваешь ее на блоки требуемой длины и передаешь растровый образ.
Я как-то давно баловался прямым выводом на печать (для матричного принтера это гораздо быстрее, чем через драйвер Windows), но забросил именно из-за того, что не удалось картинку передать в нужном виде.
Lasciate ogni speranza, voi ch'entrate.

GRS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 186
Зарегистрирован: 29.02.2004 (Вс) 22:23
Откуда: Казахстан, Алматы

Сообщение GRS » 27.10.2004 (Ср) 18:16

alibek писал(а):...но забросил именно из-за того, что не удалось картинку передать в нужном виде.


Как бы сказать, звучит эээ... многообещающе :roll:
Как, блин, быть? :shock: :?:
Встану рано утром, выпью чашку ртути... Всё равно я сдохну в этом институте...

GRS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 186
Зарегистрирован: 29.02.2004 (Вс) 22:23
Откуда: Казахстан, Алматы

Сообщение GRS » 28.10.2004 (Чт) 5:48

У меня идея возникла :idea: и суть ее в том, что бы побайтово файл считать и отослать в порт. Чё вы думаете он мне выдал? :shock: В страшном сне не увидишь... Чё делать :?: :roll:
Встану рано утром, выпью чашку ртути... Всё равно я сдохну в этом институте...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 28.10.2004 (Чт) 10:04

А с чего бы принтеру понимать форматы файлов?
Я же говорю, на принтер передаешь растр.
Т.е. структурно примерно так:
Код: Выделить всё
Dim str As String, res As Byte
For Y = 1 To ImageHeight
  str = vbNullString
  For X = 1 To ImageWidth Step 8
    res = 0
    For B = 0 To 7
      If Image.Point(X+B, Y) <> vbWhite Then res = res + 2^B
    Next B
    str = str & Chr$(res)
  Next X
  Print #1, Chr$(27) & " * " & str
Next Y


Разумеется этот код работать не будет :)
Тебе надо вначале узнать, в каком виде принтеру требуется растр (скорее всего в подобном тому, как я указал). Затем тебе необходимо изображение разделить на фрагменты, т.к. буфер у матричных принтеров обычно небольшой и надо "уместиться" в него.
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 1

    TopList  
cron