Форум: "WinAPI";
Текущий архив: 2002.08.12;
Скачать: [xml.tar.bz2];
ВнизDeviceContext Найти похожие ветки
← →
Dmk (2002-06-05 00:39) [0]Здравствуйте!
Имеются ли способы выделив блок памяти функцией AllocMem или иной другой, создать DeviceContext ну например чтобы рисовать функцией BitBlt на форме используя данные этого блока памяти?
Функции вроде CreateBitmap CreateDIBSection и т.д. к сожалению не подходят.
← →
Игорь Шевченко (2002-06-05 09:52) [1]CreateDC поможет ?
← →
Игорь Шевченко (2002-06-05 09:54) [2]CreateCompatibleDC, CreateCompatibleBitmap и т.д.
← →
SPeller (2002-06-05 10:50) [3]
hDC:=CreateCompatibleDC(Form1.Canvas.Handle);
hBMP:=CreateCompatibleBitmap(Form1.Canvas.Handle,x,y);
oldObj:=SelectObject(hDC,hBMP);
// Ирисуем в hDC всё что угодно
SelectObject(hDC,oldObj);
DeleteDC(hDC);
DeleteObject(hBMP);
← →
Dmk (2002-06-06 00:44) [4]Ребят спасибо Вам за помощь! :)
Но это немного не то, что нужно. Блок памяти я должен выделить отдельной функцией, а не получить его от операционки с помощью Вами указанных функций. Ну выделил предположим я 16 Mb памяти под изображение функцией GetMem или AllocMem и как мне получить hDC моего блока памяти?
А вообще суть проблемы в том, что функция CreateDIBSection под Win98 может выделить память только с оперативки. А определить корректно сколько ее свободно не может. Мешает всякий мусор забуфферизированный by Windows. И самое противное. Windows буфферизирует другие выделяемые блоки памяти моей программы которые я временно сбрасываю на диск.Поэтому через некоторое время функция CreateDIBSection отказывается создавать новые DIB"ы. Избежать этой проблемы можно создавая собственные блоки памяти но вот как сказать to Windows, что мой Pointer это есть hDC я не знаю. И ответов нигде не нашел. MSDN и Windows SDK help по этому поводу молчат. Хотя может плохо искал. :(
← →
SPeller (2002-06-06 10:13) [5]Ты просто не понимешь, что контекст устройства это не болк памяти в котором хранится изображение, это устройство вывода. Память под рисунок выделяется функцией CreateCompatibleBitmap() под изображение размерами X на Y. При этом программисту не приходится думать откуда эта память возьмётся, из оперативки непосредственно или из дискового пространства. 2 ГБ, выделенных для процесса, достаточно для всего что ты задумаешь забуферизовать. При этом Виндовс сама разберётся где, как и откуда взять память. И указателя на контекст или ресурс GDI не существует (для программиста, который этими ресурсами пользуется), существует только манипулятор, с помощью которого всё делается. И не забивай себе голову вопросом сколько оперативки свободно, в Винде это не важно. Здесь ограничение только свободным пространством на диске.
← →
Dmk (2002-06-06 21:49) [6]Я просто хотел используя мой блок памяти рисовать из него на hDC формы функцией BitBlt. Это все, что мне нужно.
А размера в 2Gb к сожалению мне не хватает. Я использую Tiff PackBits файлы объемом до 0.9Gb x 12. Один Bitmap Tiff A0 формата с разрешением 2400 dpi занимает в памяти 0.9GB, а мне надо держать в памяти до 12 каналов к сожалению это возможно не на всех компах, приходится подгружать. Кстати в Photoshop такие Tif"ы вообще отказывается понимать. :(
Что такое DC я наверно все-таки понимаю, просто неверно сформулировал вопрос. С уважением. Dmk.
← →
SPeller (2002-06-07 01:36) [7]А зачем держать в памяти? Держи в файлах на диске и в нужный момент открывай. Отображай их в память и работай. Как только не надо, обратно на диск. Времени не на много больше займёт.
← →
Dmk (2002-06-07 03:46) [8]Да все так и происходит, просто в Win98 проблемы со свободной памятью. Когда она заканчивается CreateDIBSection не может больше создавать DIB"ы. А GetMem может высвободить оперативку и выделить кусок памяти. Только очистка GetMem"om как то не серьезно.
А еще представь себе, что Shop постоянно с диска Image читает. Так кто ж в нем работать захочет. :)
В общем буду пробовать. Если удасться это сделать обязательно выложу на http://delphibase.endimus.com/ или еще куда нибудь.
← →
SPeller (2002-06-07 12:42) [9]Удачи !
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.08.12;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c