Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 741

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Недавно я же поднимал вопрос о печати изображения по частям. Благодаря Вашим ответам сгондобил такую бяку(прикреплена ниже). Беда в следующем: когда кртинка меньше листа, её растягивает до его размера. если больше (пробовал исходную картинку ресайзить в асдси до 4000*чегото там), то выдаёт ошибку... подскажите, пожалуйста. про первую проблему я только догадываюсь, а вот что делать со второй, совсем никаких идей :(

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

red_88 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: red_88 (статус: Посетитель)
Вопрос отправлен: 1 июля 2008, 15:01
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Мережников Андрей

Здравствуйте, red_88!
Убери переменную myPrinter совсем. Убери строку myPrinter:=TPrinter.create; Везде, где стоит myPrinter поставь просто Printer. Ошибки тогда нет, если имелось ввиду "Access violation...". Только картинка печатается уменьшенной. Проверь алгоритм вычисления масштаба.

Ответ отправил: Мережников Андрей (статус: Абитуриент)
Время отправки: 1 июля 2008, 17:05


Мини-форум вопроса

Всего сообщений: 8; последнее сообщение — 2 июля 2008, 14:19; участников в обсуждении: 4.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 1 июля 2008, 16:03 [#1]:

какой из двух проектов смотреть: kish или kish_main? И для чего в архиве exe файл?
red_88

red_88 (статус: Посетитель), 1 июля 2008, 16:07 [#2]:

проект там только kish. а про ехешник, пардон, забыл удалить из архива, просто как есть проект, так и скинул всю папку
Шичко Игорь

Шичко Игорь (статус: 9-ый класс), 1 июля 2008, 16:57 [#3]:

Какую именно ошибку выдает программа.
У себя я проверил с размером картинки 4000 * 3600: нормально разбивается на 4 части.
red_88

red_88 (статус: Посетитель), 1 июля 2008, 17:05 [#4]:

project kish.exe raised exception class EAccessViolation with message 'Access violation at address 004256E4 in module "kish.exe'. Read of address 0000001D'. Потом останавливается на строчке
myPrinter.Canvas.CopyRect(rect_print,buf_bitmap.Canvas,rect_image);
а на 4 разбивает не растягивая, или куски до страницы тянет всё равно?
red_88

red_88 (статус: Посетитель), 1 июля 2008, 17:35 [#5]:

buf_bitmap:=TBitmap.Create;
buf_bitmap.LoadFromFile('11112.bmp');
image1.picture.LoadFromFile('11112.bmp');
form1.Canvas.Draw(0,0,buf_bitmap);
myprinter:=TPrinter.Create;
x:=myprinter.PageWidth;
dx:=x/a4_w;
y:=myprinter.PageHeight;
dy:=y/a4_h;
x:=x-30;
y:=y-30;
x:=round(dx*a4_p_w);
y:=round(dy*a4_p_h);
koli:=buf_bitmap.Width div x +1;
kolj:=buf_bitmap.Height div y +1;
myPrinter.BeginDoc;
for i:=1 to koli do
for j:=1 to kolj do
begin
if (i>1) or (j>1) then myprinter.NewPage;
shir:=x;vis:=y;
if i=koli then
shir:=buf_bitmap.Width-buf_bitmap.Width div x * x;
if j=kolj then
vis:=buf_bitmap.Height-buf_bitmap.Height div y * y;
rect_print:=Bounds(round(dx*1.5),round(dy*1.5),shir,vis);
rect_image:=bounds(x*(i-1),y*(j-1),shir-1,vis-1);
myprinter.Canvas.Rectangle(rect_print);
myPrinter.Canvas.CopyRect(rect_print,buf_bitmap.Canvas,rect_image);
end;
myPrinter.EndDoc;

теперь печатает не растягивая, но вот после двух кусочков выскакивает таже ошибка :(
Вадим К

Вадим К (статус: Академик), 1 июля 2008, 23:15 [#6]:

Не решите вы таким образом задачу. Дело в том, что в любом предложенном решении всё упирается в класс TBitmap, который уходит корнями к HBITMAP. А он имеет ограничения на размер. Точно не помню, где то в районе 16 тысяч пикселей. Под 98 и того меньше было.
Как выход - использовать свой класс.
Галочка "подтверждения прочтения" - вселенское зло.
Шичко Игорь

Шичко Игорь (статус: 9-ый класс), 2 июля 2008, 07:59 [#7]:

Во втором варианте кода тоже работает.
1 вариант растягивал сраницы до полной.
2 вариант бьет на страницы в реальных размерах (т.е. страницы 2, 3, 4) заполнены не полностью.
Попробуйте отладить используя в качестве принтера Microsoft Office Document Image Writer
red_88

red_88 (статус: Посетитель), 2 июля 2008, 14:19 [#8]:

проблема была решена по подсказке Мережникова Андрея путём замены myprinter на printer (мало что понял, но заработало :) )
по поводй 16 тысяч учту, сапсибо. думаю, с учётом масштабирования хватит

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:01
Выполнено за 0.02 сек.