|
Вопрос # 1 741/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Недавно я же поднимал вопрос о печати изображения по частям. Благодаря Вашим ответам сгондобил такую бяку(прикреплена ниже). Беда в следующем: когда кртинка меньше листа, её растягивает до его размера. если больше (пробовал исходную картинку ресайзить в асдси до 4000*чегото там), то выдаёт ошибку... подскажите, пожалуйста. про первую проблему я только догадываюсь, а вот что делать со второй, совсем никаких идей :(
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
 |
Вопрос задал: 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 (статус: Посетитель), 1 июля 2008, 16:07 [#2]:
проект там только kish. а про ехешник, пардон, забыл удалить из архива, просто как есть проект, так и скинул всю папку
|
|
Шичко Игорь (статус: 9-ый класс), 1 июля 2008, 16:57 [#3]:
Какую именно ошибку выдает программа.
У себя я проверил с размером картинки 4000 * 3600: нормально разбивается на 4 части.
|
|
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 (статус: Посетитель), 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 (статус: Посетитель), 2 июля 2008, 14:19 [#8]:
проблема была решена по подсказке Мережникова Андрея путём замены myprinter на printer (мало что понял, но заработало )
по поводй 16 тысяч учту, сапсибо. думаю, с учётом масштабирования хватит
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|