Форум: "Основная";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];
Внизпрорисовка в Image... Найти похожие ветки
← →
MacroDenS © (2004-07-08 13:50) [0]Доброго времени суток господа.
Возникла такая проблема.
Прорисовывою в имадже картинку + вывод текста, работаю через канвас(размер примерно 1200х850).
После определенного количества операций, дальнейшая прорисовка не отображается.
Если кто-то знает в чем дело, прошу сообщить.
За ранее благодарен.
С Уважением MacroDenS
----------------------
...тем временем закопался в хелпах...
← →
Amoeba © (2004-07-08 13:51) [1]Код в студию!
← →
MacroDenS © (2004-07-08 14:10) [2]код самый обычный, и особо не влияющий.
image1.setbound(0,0,1169,827);
factor:=1;
with image1.canvas do
begin
for i:=0 to 8 do
begin
MoveTo(50*Factor, (182+i*20)*Factor);
LineTo(780*Factor, (182+i*20)*Factor);
end;
//таблица
Rectangle(45*Factor,372*Factor,1125*Factor,447*Factor);
MoveTo(45*Factor,428*Factor); LineTo(1125*Factor,428*Factor);
MoveTo(210*Factor,373*Factor); LineTo(210*Factor,447*Factor);
MoveTo(280*Factor,373*Factor); LineTo(280*Factor,447*Factor);
MoveTo(340*Factor,373*Factor); LineTo(340*Factor,447*Factor);
MoveTo(426*Factor,373*Factor); LineTo(426*Factor,447*Factor);
MoveTo(548*Factor,373*Factor); LineTo(548*Factor,447*Factor);
MoveTo(632*Factor,373*Factor); LineTo(632*Factor,447*Factor);
MoveTo(712*Factor,373*Factor); LineTo(712*Factor,447*Factor);
MoveTo(800*Factor,373*Factor); LineTo(800*Factor,447*Factor);
MoveTo(922*Factor,373*Factor); LineTo(922*Factor,447*Factor);
MoveTo(1020*Factor,373*Factor); LineTo(1020*Factor,447*Factor);
//далее текст
font.charset:=russian_charset;
font.name:="Arial";
font.size:=10;
font.color:=clBlack;
textout(50*Factor, 168*Factor, "Text");
textout(50*Factor, 188*Factor, "Text");
textout(50*Factor, 208*Factor, "Text");
textout(50*Factor, 228*Factor, "Text");
textout(50*Factor,248*Factor, "Text");
textout(50*Factor, 268*Factor, "Text");
textout(50*Factor, 288*Factor, "Text");
textout(50*Factor, 308*Factor, "Text");
textout(50*Factor, 328*Factor, "Text");
//... и еще около 35 выводов текста
//после чего, при последующем выводе текста или просто прорисовке линий, команды выполняются, но на имадже, кроме того, что было уже нарисовано, ничего не отображается.
//Может память нужно зарезевировать?
//Если да, то каким образом.
end;
← →
Семен Сорокин © (2004-07-08 14:21) [3]MacroDenS © (08.07.04 14:10) [2]
при изменении размеров Image меняй размеры Image.Picture.Bitmap, дабы изменить размеры Canvas"а.
ЗЫ. используй для рисования TPaintBox.
← →
MBo © (2004-07-08 14:24) [4]Небольшой offtop:
>textout(50*Factor, 168*Factor, "Text");
textout(50*Factor, 188*Factor, "Text");
...много такого же
А циклом нельзя?
← →
MacroDenS © (2004-07-08 14:24) [5]
при изменении размеров Image меняй размеры Image.Picture.Bitmap, дабы изменить размеры Canvas"а.
размер картинки не меняется!!!
ЗЫ. используй для рисования TPaintBox.
TPaintBox не очень удобно использовать, его постоянно нужно прорисовывать, иначе затирается.
← →
MacroDenS © (2004-07-08 14:29) [6]
Небольшой offtop:
>textout(50*Factor, 168*Factor, "Text");
textout(50*Factor, 188*Factor, "Text");
...много такого же
А циклом нельзя?
Циклом-то можно. просто прорисовка на канве и так медленная по сути вещь, а если еще и циклы поставить, дополнительный тормоз.
Я читал одну статейку по оптимизации циклов (К. Касперский, журна "Программист" сернябрь-ноябрь 2003), так вот там приводился пример по оптимизации циклов путем их развертывания,
то есть шаг уже брался не 1, а 4, 8, 16, 32. Сам проверял, с шагом 32 циклы выполняются на много быстрее. Поэтому если есть последовательные повторения по количеству меньше 32 циклы стараюся не использовать. Хотя в этом коде короткий цикл всеже присутствует
← →
Amoeba © (2004-07-08 14:30) [7]
> его постоянно нужно прорисовывать, иначе затирается.
Код рисования должен находиться в событии OnPaint.
← →
MBo © (2004-07-08 14:33) [8]> если еще и циклы поставить, дополнительный тормоз.
;)
Не тот случай.
>размер картинки не меняется!!!
а этот как понимать?
>image1.setbound(0,0,1169,827);
Вывод прекращается в любой области или в некоторых только?
← →
Семен Сорокин © (2004-07-08 14:34) [9]
> TPaintBox не очень удобно использовать, его постоянно нужно
> прорисовывать, иначе затирается.
рисуй один раз на битмапе, а при перерисовке - копируй битмап на канву - всяко быстрее.
а вот это что: image1.setbound(0,0,1169,827);
← →
MacroDenS © (2004-07-08 14:47) [10]
а этот как понимать?
>image1.setbound(0,0,1169,827);
По сути она ничего не дает.
Вывод прекращается в любой области или в некоторых только?
да
рисуй один раз на битмапе, а при перерисовке - копируй битмап на канву - всяко быстрее.
битмап исключен. он искажает текст.
разумеется, я привел не полный код, из личных соображений, только то, что касается конкретно имаджа.
в оригинале это функция, которая рисует либо на имадже, либо на принтере
Function pnt(output:TCanvas; Factor:Integer = 1);
//Параметр factor, это собственно для масштабирования на принтере. (этот способ очен удобен тем, что нет искожения шрифтов в отличае от битмапа и имаджда в целом)
var
cnv:TCanvas;
begin
cnv:=TCanvas.create;
cnv.handle:=output;
with cnv do
begin
//вышеупомянутый код, касающий вывода изображения.
end;
cnv.handle:=0;
cnv.free;
end;
так вот на притере выводится вся картинка, а в имаге нет!
По моему дело все таки в памяти
← →
Amoeba © (2004-07-08 14:49) [11]
> По моему дело все таки в памяти
Что-то с трудом верится в такое...
← →
Amoeba © (2004-07-08 14:56) [12]> with image1.canvas do
Ничего себе! Рисовать нужно не на этом, а на Image.Picture.Bitmap.Canvas
← →
MacroDenS © (2004-07-08 15:13) [13]
Ничего себе! Рисовать нужно не на этом, а на Image.Picture.Bitmap.Canvas
разницы никакой.
← →
Mim1 © (2004-07-08 19:26) [14]
> размер картинки не меняется!!!
Красиво смотрится кучка восклецательных знаков :)
Сегодня, один некий человечек утверждал в чате что бибилотек стоит выгружать методом release. :) Вы с ним не знакомы?
Решение то уже раз пять вам сказали.
А вы все "Не подходит", да "не подходит"
← →
MacroDenS © (2004-07-09 16:10) [15]to Mim1 © (08.07.04 19:26) [14]
Ну я наверное просто так не сижу, и не жду, когда кто-нидь мне ответ на блюдечке с голубой каемочкой принесет.
Я пытаюсь решить проблему всеми возможнимы методами, которые включают как help, faq, форумы, так и руки с мозгами.
На сегодняшний день проблема является решенной. И решенной своими силами. Вот когда кто-нибудь столкнется с подобной траблой, тогда и опишу решение.
Обсуждение закрыто.
← →
MadGhost © (2004-07-09 19:21) [16]гыгыг, эгоист :) выкладывай решение.
← →
Mim1 © (2004-07-10 13:39) [17]
> Я пытаюсь решить проблему всеми возможнимы методами, которые
> включают как help, faq, форумы, так и руки с мозгами.
Чтото не заметно, особонно относительно последнего.
Вам дыважды дали верный ответ, причем и с учетом быстрой работы.
Проблемма то, на холсте котором по ему назначению положено рисрваться не рисуется :), смешно. Я по своей брезгливости на вопросы в стиле "почему кнопка не нажимается", не отвечаю, но здесь вам люди вам ответили и не раз, в том числе и мастера.
Если человек сам не хочет себе помочь, то ему никто не поможет.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.035 c