Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.5 MB
Время: 0.036 c
6-1085635353
ORMADA
2004-05-27 09:22
2004.07.25
Indy


1-1089603479
Vitalik
2004-07-12 07:37
2004.07.25
TChart


1-1089520403
TUser
2004-07-11 08:33
2004.07.25
CreateProcess+AssignFile


1-1089387143
ZiRoCool
2004-07-09 19:32
2004.07.25
Как главную форму убрать из панели задач?


11-1077962642
ALeX.B.
2004-02-28 13:04
2004.07.25
Вопрос по Меmo и RichEdit.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский