Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Delphi |
![]() ![]() |
Топик располагается на нескольких страницах: 1 2 3 4 [все] |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Наконец дошли руки до моей поделки. Сразу столкнулся с двумя проблемами. 1. При попытке открыть тиф больше 2 гигов оказалось, что TStream этого не может потому что у него 2. При попытке просто создать картинку и задать ей размеры 25000 на 25000 (заведомо больше 2ГБ) поймал исключение при вызове gdi32 CreateCompatibleBitmap(DC: HDC; Width, Height: Integer): HBitmap;. А тут уже не совсем ясно. Это может быть связано с тем, что у меня в видюшке всего 2 гига памяти? Прошу совета, в каком направлении двигаться. В общем, задача выглядит так: открываем большую-большую картинку, рисуем на ней LineTo, TextOut, сохраняем. Показывать картинку целиком я не собираюсь, только маленький кусочек для превью. Разбивать картинку на кусочки тоже не собираюсь, там на стыках слишком много лишних расчетов получится. Да и не для того я 32 гига оперативки покупал. Delphi XE3, Windows 7 SP1 x64. |
22 фев 21, 20:09 [22284875] Ответить | Цитировать Сообщить модератору |
kdv Member Откуда: iBase.ru Сообщений: 29547 |
Flying-home, приложение 32бит? ну не может оно аллокировать больше 2 гиг. Что за программисты пошли, вообще ничего не знают. |
22 фев 21, 20:13 [22284877] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52451 |
Что тебе неясно? Лапки не только у TStream. Забей на битмап, работай просто с массивом пикселей. Posted via ActualForum NNTP Server 1.5 |
||
22 фев 21, 20:21 [22284881] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Да не, специально скачал свежую (относительно) Дельфу, выставил в свойствах проекта таргет платформ x64. |
||||
22 фев 21, 20:26 [22284883] Ответить | Цитировать Сообщить модератору |
Соколинский Борис Member Откуда: Москва Сообщений: 14192 |
|
||||||||
22 фев 21, 20:28 [22284886] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Думаю, так и придется. А рисовать как? Самому вот это вот все реализовывать? Я хочу и полупрозрачность, и другие вкусняшки GDI. |
||||||
22 фев 21, 20:29 [22284887] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Бить на кусочки? Грустно. |
||||||||||||
22 фев 21, 20:30 [22284888] Ответить | Цитировать Сообщить модератору |
Соколинский Борис Member Откуда: Москва Сообщений: 14192 |
Flying-home, Ты хочешь сказать, что исходная картинка не из кусочков? Можно я не поверю? |
22 фев 21, 20:33 [22284890] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Ну конечно, была склеена из кусочков. Но рисовать-то удобнее на целом листе. Кстати, есть такие картинки, которые точно не из кусочков. https://api.discover.digitalglobe.com/show?id=103001008D9D1700 Это превьюшка снимка разрешением 0.5 метра на пиксель. Там точно больше 2 гигов. |
||||
22 фев 21, 20:40 [22284894] Ответить | Цитировать Сообщить модератору |
Соколинский Борис Member Откуда: Москва Сообщений: 14192 |
Flying-home, Нет таких матриц в природе, это все панорамные съемки. И хранить их в непорезанном виде - совсем не умная идея. |
22 фев 21, 20:46 [22284897] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Они хранятся продаются в непорезанном виде. И ортокоррекцию им делают тоже в непорезанном виде. Так удобнее. Кстати, делаются они тоже целиком, за один проход. Но там по принципу сканера фотка делается, ширина снимка ограничена размером матрицы, а высота - нет. |
||||
22 фев 21, 21:05 [22284905] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Ладно, вернемся к нашим баранам. Если я буду резать картинки на кусочки по 2 гига, смогу ли я работать с каждым их этих кусочков в отдельном потоке? И это. Тот же Ирфан Вью легко и быстро открывает и показывает этот тиф. Значит, он что-то знает, чего не знаем мы? |
22 фев 21, 21:10 [22284908] Ответить | Цитировать Сообщить модератору |
Соколинский Борис Member Откуда: Москва Сообщений: 14192 |
Рискну предположить, что в твоем tiff-е оно и есть, только зачем-то запихнуто в один файл.
Сомнительно что так со спутника можно снять, временной параллакс и все такое. |
||||||||
22 фев 21, 21:15 [22284911] Ответить | Цитировать Сообщить модератору |
Соколинский Борис Member Откуда: Москва Сообщений: 14192 |
|
||||
22 фев 21, 21:16 [22284913] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Я имею в виду, нет ли у GDI каких-то ограничений на вызов функций не из основного потока приложения?
Правда, он на плюсах написан. |
||||||||
22 фев 21, 21:21 [22284916] Ответить | Цитировать Сообщить модератору |
Соколинский Борис Member Откуда: Москва Сообщений: 14192 |
|
||||
22 фев 21, 21:22 [22284917] Ответить | Цитировать Сообщить модератору |
miksoft Member Откуда: Сообщений: 38693 |
Можете дать образец такого тифа? |
||||
22 фев 21, 21:23 [22284918] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
1. Тайлы начинают рулить, когда приходится показывать эту картинку на экране. А на стадии обработки одним куском удобнее. Ну представь, тебе надо нарисовать горизонталь, которая тянется через всю картинку. Или любую другую линию. На тайлах никто не рисует. 2. Да, уверен. Просто по-другому никак. |
||||||||||||
22 фев 21, 21:25 [22284920] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Классная идея! Ща выложу. |
||||||||
22 фев 21, 21:26 [22284921] Ответить | Цитировать Сообщить модератору |
Соколинский Борис Member Откуда: Москва Сообщений: 14192 |
Аннотации нужно в векторном виде хранить и рисовать оверлеем. |
||||
22 фев 21, 21:29 [22284923] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
В общем и целом да. Но иногда надо рисовать. Например, когда конечное приложение не умеет вектор. Или как в моем случае, нет приложений, которые рисовали бы вектор так, как мне надо. |
||||||||
22 фев 21, 21:33 [22284924] Ответить | Цитировать Сообщить модератору |
Соколинский Борис Member Откуда: Москва Сообщений: 14192 |
|
||||
22 фев 21, 21:44 [22284928] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Не все так просто. Яндекс хочет, чтобы я какую-то прогу установил. |
||||||||
22 фев 21, 21:45 [22284930] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Вот тут пацаны в далеком 2001 году пришли к выводу, что работа CreateCompatibleBitmap таки зависит от видеокарты и настройки драйверов.
Это никуда не годится. Получается, надо искать способы рисовать на битмапе без GDI. |
||||||||||
22 фев 21, 22:38 [22284949] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Ах, если бы делать то что надо было бы так же просто, как знать, что надо делать! (С) "Написать самому" в данном случае будет сложнее, чем написать свою ГИС с нуля. У меня сейчас продукт получается в результате последовательных действий в четырех разных программах. Работа третьей меня не устраивает. Надо или ждать, пока ее разработчики почешутся, или писать то, о чем я говорю. Именно рисовать на больших растрах. |
||||||||
22 фев 21, 22:48 [22284952] Ответить | Цитировать Сообщить модератору |
Sapersky Member Откуда: Сообщений: 82 |
Flying-home, Забудьте про DDB (CreateCompatibleBitmap), в современных виндах от них никакой пользы нет. DIB 25000*25000 в 64-битном режиме создаётся, но работает ли рисование - не пробовал. b := TBitmap.Create; b.PixelFormat := pf24Bit; b.SetSize(25000, 25000);Вообще лучше искать библиотеку, которая может выделять память под битмап через GetMem. Graphics32 вроде так умеет, и даже через MMF: https://graphics32.github.io/Docs/Additional Topics/Back-Ends.htm но рисовать придётся только средствами самой библиотеки. При загрузке tiff могут быть проблемы, если загрузка не нативная, а скажем через GDI+, то опять же всё пойдёт через виндовые битмапы. |
22 фев 21, 23:04 [22284958] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Так она вызывается в SetSize! SetSize - CopyImage - CopyBitmap - Result := GDICheck(CreateCompatibleBitmap(ScreenDC, bmWidth, bmHeight)) |
||||
22 фев 21, 23:18 [22284963] Ответить | Цитировать Сообщить модератору |
rgreat Member Откуда: Сообщений: 6564 |
Только в дельфи коммюнити могут сказать "свежая" про версию среды аж 8-летней давности. Работу с 4+ GB потоками давным давно уже поправили. А XE3 это всего 2-я версия среды с поддержкой x64. Сообщение было отредактировано: 22 фев 21, 23:16 |
||||
22 фев 21, 23:22 [22284966] Ответить | Цитировать Сообщить модератору |
Sapersky Member Откуда: Сообщений: 82 |
Flying-home, Если PixelFormat задан конкретный (не pfDevice по умолчанию), то должен создаваться DIB через CreateDIBSection. Заглянул в потроха - так и есть, CreateDIBSection в CopyBitmap. |
22 фев 21, 23:24 [22284968] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Я до этого писал в BDS 2006, мне хватало. Тут захотелось много памяти, спросил пацанов в соседнем топике, что ставить. Посоветовали XE3, сказали, за глаза хватит. А тут, оказывается, не все так просто. И TStream с шестой версии не переписывался. |
||||||||
22 фев 21, 23:34 [22284972] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Это уже лучше. Осталось загрузить имеющийся тифф в этот битмап. Спасибо. |
||||
22 фев 21, 23:35 [22284973] Ответить | Цитировать Сообщить модератору |
rgreat Member Откуда: Сообщений: 6564 |
Такая веселая хрень имхо вообще только в дельфи комьюнити и существует. ;) |
||||
22 фев 21, 23:39 [22284975] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Не знаю, о каком комьюнити ты говоришь, я большей частью сам по себе. Мне для поделок хватало, и ладно. |
||||||||
22 фев 21, 23:42 [22284977] Ответить | Цитировать Сообщить модератору |
ъъъъъ Member Откуда: Сообщений: 1776 |
Да ладно. К нам один человечек на работу устраиваться приходил, он на C++ пишет, использует MS VS 6.0, и (по его словам) контора, где он раньше работал. |
||||||||
22 фев 21, 23:42 [22284979] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
В него битмап из файла не получается загрузить. Все тот же TStream больше 2 гигов не умеет. Весело! |
||||||||
22 фев 21, 23:44 [22284980] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Так это ключевые слова! Раньше = 20 лет назад. |
||||||||
22 фев 21, 23:46 [22284981] Ответить | Цитировать Сообщить модератору |
rgreat Member Откуда: Сообщений: 6564 |
|
||||
22 фев 21, 23:48 [22284982] Ответить | Цитировать Сообщить модератору |
ъъъъъ Member Откуда: Сообщений: 1776 |
Зачем нам сипипишники. |
||||||||
23 фев 21, 00:03 [22284986] Ответить | Цитировать Сообщить модератору |
Sapersky Member Откуда: Сообщений: 82 |
Или смотреть сторонние библиотеки для загрузки Tiff, которые не используют стримы. FreeImage вроде не использует, ImagingLib и т.д. Хотя у них могут быть свои проблемы с загрузкой огромных картинок - что поделаешь, специфическая задача, мало кому это нужно. |
||||
23 фев 21, 01:03 [22284999] Ответить | Цитировать Сообщить модератору |
white_nigger Member Откуда: Тула Сообщений: 2469 |
Да не может gdi с подобной размерностью нормально работать. Прими как данность. Это уже много раз обсасывалось. Конкретно на своём компе я как-то вычислял максимальный размер битмапа, правда уже не помню точно, но до 30000 точно не дошло. Все подобные вещи рисуются по кускам/тайлам, как уже ранее сказали |
23 фев 21, 02:28 [22285011] Ответить | Цитировать Сообщить модератору |
Мудроглюков Member Откуда: Сообщений: 8319 |
Flying-home, Одной из генеральных задач при создании FireMonkey было предоставление возможностей для создания богатого графического интерфейса и конечно добавлена работа с большими графическими файлами. Есть вот специально для больших изображений TBitmapSurface (совместимый с TBitmap). ... PS Про TBitmapSurface так заявлено разработчиками FireMonkey. ////////////////////////////////////// PS Скажи - это КАРТУ рисуешь? Для карт есть специальные типы. PS Почему кусками не отрабатываешь? Лень думать над алгоритмом? |
23 фев 21, 10:34 [22285040] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
На спутниковом снимке хочу рисовать. Я готов смириться с разбиением на куски. Но не хочу зависеть от видюшки. Хочу рисовать в ОЗУ средствами ЦПУ. |
||||
23 фев 21, 12:39 [22285080] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Пацаны говорят, что не получается на ней рисовать. Приходится бить на куски, загружать в обычный TBitmap и рисовать на нем. https://stackoverflow.com/questions/51523321/how-to-draw-fmx-surface-tbitmapsurface-on-fmx-graphics-tbitmap Сообщение было отредактировано: 23 фев 21, 13:08 |
||||
23 фев 21, 13:14 [22285101] Ответить | Цитировать Сообщить модератору |
defecator Member Откуда: Сообщений: 39692 |
Graphics32 попробуй. |
||||||||
23 фев 21, 14:15 [22285133] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
CreateDIBSection тоже не работает. Сделал картинку 25000 на 25000, сохранил в файл, а там меньше 2ГБ. Сделал 30000 на 30000, поймал ту же ошибку. |
||||
23 фев 21, 15:12 [22285169] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
А нет ли случайно в природе решений вроде виртуальной видеокарты? Чтобы подсистема GDI думала, что работает с видюшкой, а на самом деле использовалась обычная память компа? |
23 фев 21, 15:29 [22285178] Ответить | Цитировать Сообщить модератору |
white_nigger Member Откуда: Тула Сообщений: 2469 |
|
||||
23 фев 21, 15:39 [22285184] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Он закончился на XE2 и, похоже, не 64-битный. Да на нем это и написано. https://graphics32.github.io/Docs/Installation.htm Написано только, что в критических секциях может использовать инструкции x64 процессоров. |
||||||||
23 фев 21, 15:55 [22285189] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Если такое решение будет простым и надежным, пуркуа бы не па? Можно попытаться уточнить формулировку задачи: Есть много больших картинок (> 2ГБ), на которых надо рисовать объекты размером с эти картинки. Есть много памяти и ядер, но мало видеокарт и мало видеопамяти. Если я пойду путем разбиения картинки на приемлемые для GDI кусочки, я потеряю в производительности, потому что один поток будет ждать, пока предыдущий освободит видеопамять. |
||||||||
23 фев 21, 16:07 [22285197] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
А все эти современные новомодные процессоры с графическими ядрами ограничены по объему памяти, которую могут использовать? Я могу им в биосе отдать 60 ГБ ОЗУ? |
23 фев 21, 16:15 [22285200] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52451 |
Делаешь из объекта, который надо рисовать, поток пикселей. Потом просто складываешь два потока любым удобным способом, это не требует затрат памяти. Posted via ActualForum NNTP Server 1.5 |
||
23 фев 21, 16:52 [22285216] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Я, похоже, зря паникую. Вот этот код работает.SetLength(b, 10); for i := 0 to 9 do begin b[i] := TBitmap.Create; b[i].PixelFormat := pf24Bit; b[i].SetSize(25000, 25000); b[i].Canvas.Pen.Color := clBlack; b[i].Canvas.MoveTo(1, 1); b[i].Canvas.LineTo(24999, 24999); Memo1.Lines.Add(IntToStr(i) + ' done'); Application.ProcessMessages; end; И картинки сохраняются в BMP чуть меньше 2 гигов. В принципе, это меня устроит, если заработает в десяти потоках. Остается открытым вопрос откуда GDI взяло это ограничение на 2 гига? Неужели все-таки это объем видеопамяти? Ща потоки запилю, подождите. |
23 фев 21, 17:08 [22285225] Ответить | Цитировать Сообщить модератору |
white_nigger Member Откуда: Тула Сообщений: 2469 |
У нас есть коммерческий продукт для работы с географическими сервисами. И там именно поточно блочная архитектура. Если бы он всю память отжирал, им бы никто не рискнул пользоваться)) ...и да вас это тоже касается)) |
23 фев 21, 17:25 [22285232] Ответить | Цитировать Сообщить модератору |
rgreat Member Откуда: Сообщений: 6564 |
|
||||
23 фев 21, 18:03 [22285248] Ответить | Цитировать Сообщить модератору |
Sapersky Member Откуда: Сообщений: 82 |
https://github.com/graphics32/graphics32/tree/master/Source/Packages и 64 бита тоже, судя по исходникам. Странно, если бы не было - это же самая популярная граф. библиотека для Дельфи. Ограничения в GDI связаны скорее всего с его возрастом, во времена проектирования считали, что "High(Integer) хватит всем". |
||||
23 фев 21, 18:03 [22285249] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Я ж могу заранее сказать, сколько памяти отжирать. |
||||
23 фев 21, 18:04 [22285250] Ответить | Цитировать Сообщить модератору |
rgreat Member Откуда: Сообщений: 6564 |
https://github.com/graphics32/graphics32 |
||||||||
23 фев 21, 18:04 [22285251] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
В потоках все отработало на ура. Только при сохранении битмапа он еще столько же памяти отжирает. Но это решаемо. |
23 фев 21, 18:05 [22285252] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Че за продукт? Можно посмотреть? |
||||
23 фев 21, 18:06 [22285253] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Было бы интересно попытать владельцев разных видюшек выполнить это. b := TBitmap.Create; b.PixelFormat := pf24Bit; b.SetSize(25000, 25000); 25000 - меньше 2 гигов, 30000 - больше 2 гигов. |
||||
23 фев 21, 18:09 [22285255] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Круто. Наверное, заюзаю. Пока заметил, что они линии без пикселизации рисуют, это хорошо. |
||||||||
23 фев 21, 18:17 [22285261] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Всем спасибо. Пока выбрал такой путь: Разбивать тифы на куски не больше 2 гигов, рисовать на них, потом склеивать обратно. |
23 фев 21, 18:28 [22285271] Ответить | Цитировать Сообщить модератору |
DHDD Member Откуда: Сообщений: 47 |
Flying-home, win64, 10.3.3, RAM 12Gb, Video Internal max 1849 Mb (Windows 7x64) 25000x25000: ошибок нет, сохранение на диск 1 875 000 054 bytes. 30000x30000: raised exception class EOutOfResources with message 'Параметр задан неверно.' Сообщение было отредактировано: 23 фев 21, 18:44 |
23 фев 21, 18:49 [22285283] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52451 |
Я не скажу за JPEG, но все остальные поддерживаемые TIFF-ом форматы, описанные в википузии, способны обрабатываться последовательно, не требуя затрат памяти вообще. Просто попробуй свои "куски" сделать один пиксель высотой. Posted via ActualForum NNTP Server 1.5 |
||
23 фев 21, 19:20 [22285304] Ответить | Цитировать Сообщить модератору |
defecator Member Откуда: Сообщений: 39692 |
Он прекрасно работает в x64, а "32" в названии - это то, что он работает с 32-ухбитными картинками |
||||||||
23 фев 21, 19:57 [22285323] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
|
||||||||
23 фев 21, 20:47 [22285343] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
|
||||||
23 фев 21, 20:51 [22285346] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52451 |
А надо ли? Проще завести список координат пикселей, которые надо портить в картинке. Posted via ActualForum NNTP Server 1.5 |
||
23 фев 21, 21:07 [22285353] Ответить | Цитировать Сообщить модератору |
Sapersky Member Откуда: Сообщений: 82 |
DIB-ы всегда в системной памяти создавались, они же device-independent. Если интересны картографические проекты, то есть SAS.Planet с открытыми исходниками. Использует, кстати, Graphics32. https://github.com/sasgis/sas.planet.src Правда, официальный сайт с бинарниками у них сейчас лежит, но можно на ютубе посмотреть, как оно выглядит. |
||||
23 фев 21, 21:09 [22285355] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
|
||||||
23 фев 21, 21:32 [22285363] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
|
||||||||
23 фев 21, 21:34 [22285364] Ответить | Цитировать Сообщить модератору |
Dimitry Sibiryakov Member Откуда: Сообщений: 52451 |
Ну смотри: вот есть у тебя линия от 0,0 до 99,99. Битмап с этой линией займёт 10000 пикселей. Просто пиксели линии - 100. Экономия памяти на два порядка. Posted via ActualForum NNTP Server 1.5 |
||
23 фев 21, 22:57 [22285389] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Да я не собираюсь экономить память. Я думал, что ограничения в 2 ГБ связаны с количеством видеопамяти. Оказалось, что нет. Судя по всему, память под битмап под рисование примитивов выделяется хоть и видеодрайвером, но в обычном ОЗУ и в ней можно рисовать средствами GDI. И выделять ее можно сколько угодно (сколько угодно кусков по 2ГБ) и работать с ней многопоточно. Это все, что мне надо. Но это не точно. Надо будет еще несколько проверок сделать. |
||||||
23 фев 21, 23:14 [22285397] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Что-то долго лежит... |
||||
вчера, 22:26 [22287185] Ответить | Цитировать Сообщить модератору |
Flying-home Member Откуда: kart.vrostove.net Сообщений: 14999 |
Не работает в дополнительных потоках. Это то, чего я опасался изначально. Начинает рисовать, потом в какой-то момент перестает без всяких ошибок и предупреждений. Как-будто игнорирует код. При этом поток продолжает работать, что-то считать, сохранять битмап в файл. И еще не освобождает память, выделенную под картинку. Если не трудно, посмотрите, пожалуйста, код. Может, я чего намудрил? Может, чего не вижу или не знаю? Очередной поток запускается кнопкой, чтоб остановить его, надо выбрать его номер в комбобоксе. После выбора нужно время чтобы поток сохранил файл. В Unit2 две константы, размер битмапа и место куда сохранять. Для того, чтобы убедиться, что не работает, достаточно одного потока (у меня по крайней мере). В диспетчере задач пока он рисует, работает ядро (красненький график). Как перестает рисовать, остается только зелененький. После сохранения картинки в отчете пишется, сколько проходов было сделано. А на самой картинке два числа, второе - количество проходов, которые реально рисовались. После остановки потоков приложение надо закрывать. К сообщению приложен файл (first.zip - 86Kb) cкачать ![]() |
||||
сегодня, 17:08 [22287330] Ответить | Цитировать Сообщить модератору |
Sapersky Member Откуда: Сообщений: 82 |
Flying-home, Вроде бы в VCL рисование не потокобезопасное, какие-то глобальные переменные используются, что ли (точно не помню, давно TBitmap не использую). То есть от размера битмапов это скорее всего не зависит. |
сегодня, 18:45 [22287344] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: 1 2 3 4 [все] |
Все форумы / Delphi | ![]() |