Вверх ↑
Этот топик читают: Гость
Ответов: 499
Рейтинг: 1
#1: 2007-05-30 18:32:43 ЛС | профиль | цитата
делаю некую программу, которая из маленьких квадратных кусочков собирает большое изображение. пример:
code_1496.txt
понажимать на кнопку, на элементе Image будут появлятся кусочки рабочего стола (50х50)
проблема в том, что не получается сохранить полученный результат. да и при большом кол-ве картинок хотелось бы использовать не Image, а что-то не визуальное, чтобы в памяти хранилось а потом записывалось.
Но элемент Bitmap (Хранение картинки в памяти) не подходит, ибо при каждом добавлении он обнуляется, и остается только последний кусочек.
не сохраняет видимо потому, что на точке ImageBitmap(содержит картинку) пусто, так как вывод идет через хэндл элемента. если указать bitmap - то ничего не рисует.

подскажите, как хотя бы в приведенной схеме сделать сохранение (желательно в bmp)?
карма: 0

0
файлы: 1code_1496.txt [976B] [249]
Администрация
Ответов: 15295
Рейтинг: 1519
#2: 2007-05-30 18:53:01 ЛС | профиль | цитата
1) в приведенной схеме компонент Bitmap можно удалить не потеряв при этом абсолютно ничего
2) для решения задачи нужно проделать две вещи:
- при старте программы задать нужный размер холста примерно так:
Add(Resize,495166,399,329)
{
link(onResult,1045892:doLoad,[(441,335)(441,314)(389,314)(389,272)])
link(Bitmap,1045892:Bitmap,[])
}
Add(Bitmap,1045892,399,266)
{
}
- делать точно такую же отрисовку кусочков в Bitmap как это делается на Image
после этого можно компонентом PictureStream сохранять его в файл

HikeR писал(а):
Но элемент Bitmap (Хранение картинки в памяти) не подходит, ибо при каждом добавлении он обнуляется

от точки с названием doLoad было бы странным ожидать ф-ности, которой обычно наделяют точку doAppend...
карма: 27
0
Ответов: 499
Рейтинг: 1
#3: 2007-05-30 19:23:38 ЛС | профиль | цитата
ура, работает, спасибо.
но медлеееееенно.... 70 метров исходных bmp файлов почти 20 минут склеивал...
карма: 0

0
Разработчик
Ответов: 26304
Рейтинг: 2146
#4: 2007-05-30 21:35:44 ЛС | профиль | цитата
HikeR, а никто и не говорил, что будет быстро. Методы отрисовки в HiAsm'e изначально медленные. Странно, почему никто не занялся их ускорением, а ведь это не так уж и сложно, но это мысли вслух
карма: 22

0
Ответов: 9906
Рейтинг: 351
#5: 2007-05-30 21:56:02 ЛС | профиль | цитата
nesco писал(а):
Методы отрисовки в HiAsm'e изначально медленные

Так уж и в HiAsm

Ты еще спроси: сколько весит полная картинка в bmp-формате (при приеме, скажем, 70М pcx, или jpeg-ов), сколько у него оперативки, и не занимается ли винда при этом изменением размера файловой страницы

Народу, вообще, похоже невдомек, чем килограмм от гектара отличается - ай долго чего-то
карма: 9

0
Разработчик
Ответов: 26304
Рейтинг: 2146
#6: 2007-05-30 22:33:46 ЛС | профиль | цитата
Galkov писал(а):
при приеме, скажем, 70М pcx, или jpeg-ов

Без вопросов. Размеры гигантские. Ну и методы отрисовки желают лучшего. Широко не применяются, например, отрисовка в аппаратно независимом DIB формате на контекстах памяти с последующим переносом на контекст устройства готовых блоков. Короче -- над этим работать и работать надо. ИМХО.
карма: 22

0
Ответов: 499
Рейтинг: 1
#7: 2007-05-31 10:35:39 ЛС | профиль | цитата
Galkov писал(а):
Ты еще спроси: сколько весит полная картинка в bmp-формате (при приеме, скажем, 70М pcx, или jpeg-ов), сколько у него оперативки, и не занимается ли винда при этом изменением размера файловой страницы

итоговая картинка - 10752х10752, 110 метров. в мозаике часть кусочков отсутствует, на их место просто черный квадрат впихивается. памяти у меня 2 гига, во время работы полученной программы обращения к винту нет совсем.
и все равно, имхо очень медленно. склеивание картинки 4х4 и 8х8 по времени отличается не то что в разы, на порядки.
для такой задачи похоже надо файлы на бинарном уровне склеивать, bmp разбирать, и писать прямо в файл.
карма: 0

0
Администрация
Ответов: 15295
Рейтинг: 1519
#8: 2007-05-31 10:42:01 ЛС | профиль | цитата
HikeR писал(а):
для такой задачи похоже надо файлы на бинарном уровне склеивать, bmp разбирать, и писать прямо в файл.

именно.

nesco писал(а):
отрисовка в аппаратно независимом DIB формате на контекстах памяти с последующим переносом на контекст устройства готовых блоков.

для задач пользовательского уровня существующие методы вполне приемлемы. Для приложений же интенсивно отображающих графику нужно использовать OpenGL, DirectX или GDI+ на худой конец.
карма: 27
0
8
Сообщение
...
Прикрепленные файлы
(файлы не залиты)