Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблемы с выводом Bitmap на Image

6.3K
10 апреля 2006 года
Slava_rec
16 / / 20.11.2004
Помогите, плиз… То ли чего-то не всасываю, то ли Builder не едет…
В общем, такая ситуация… Создаю Bitmap, устанавливаю размер, формат пикселя (pf1bit), заполняю белым (FillRect). Далее на нем рисуется дерево, после чего он благополучно вырисовывается на Image формы (Draw(0, 0, Bitmap)), при этом размеры Image подгоняются под размеры Bitmap’а. После прорисовки Bitmap удаляется. Это все повешено на событие FormShow соответствующей формы. Так вот при первом показе формы, все ОК. Размеры Bitmap и Image совпадают, заливка белая как положено. НО!!! При закрытии формы, и последующих перерисовок ДРУГИХ (больших по размеру вывода) деревьев форма остается в таком же состоянии, что и после первой прорисовки. Т.е. узлы рисуются новые, НО в той же области, что и раньше (т.е. дерево попросту НЕ помещается в отведенную область на Image). Формально размеры Image меняются в соответствии с размерами Bitmap’а (Image растет или уменьшается), НО почему-то не отображаются деревья, БОЛЬШИЕ, чем самое первое (меньшие и равные по размеру Bitmap - ОК). AutoSize == false…
1.8K
10 апреля 2006 года
Andreww
81 / / 02.01.2004
А если поставить AutoSize = true? И добавить ScrollBox чтобы если большие картинки не влазят то появлялась прокрутка?
6.3K
18 апреля 2006 года
Slava_rec
16 / / 20.11.2004
Решил проблему прорисовкой Bitmap’а на форму вот так (в событии OnPaint):

TRect SourceRect, DestinationRect;

SourceRect = Rect(HorzScrollBar->Position, VertScrollBar->Position,
HorzScrollBar->Position + Width, VertScrollBar->Position + Height);

DestinationRect = Rect(0, 0, Width, Height);

Canvas->CopyMode = cmSrcCopy;
Canvas->CopyRect(DestinationRect, Bitmap->Canvas, SourceRect);

НО!!! Теперь возникла новая проблема… Дерево вырисовывается на Bitmap’е в отдельно созданном потоке (т.к. дерево может быть огромных размеров и хотелось бы останавливать сей процесс рисования в любой момент, а ProcessMessages() использовать не хочу), по завершении которого вызывается FormShow().
Так вот, если во время рисования перемещать мышку (причем только внутри формы, которая является вызывающей по отношению к форме отображения) или нажимать кнопки, естественно никаким образом не влияя на процесс прорисовки, то когда форма появляется, то она пустая… Т.е. Bitmap не прорисован… И может быть, что из 10 раз нарисуются все 10, а может быть и 1…
Bitmap иногда достигает размеров 1500000x3000… Может из-за этого? Указатель на Bitmap создается один раз при создании главной формы и является глобальным. И еще… Чтобы получить такой размер я использовал формат пикселей pf1bit. Monochrome НЕ обеспечивает таких размеров (вылетает с ошибкой нехватки ресурсов).
Что посоветуете?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог