Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.007 c
1-35309
GTA 3
2002-07-29 17:20
2002.08.12
Как узнать четыре последних символа в Edit1?


1-35254
Freeze
2002-07-31 08:36
2002.08.12
Как программно отобразить рабочий стол как Web страницу


1-35344
Skif
2002-07-30 12:41
2002.08.12
DOS и текстовый файл


4-35506
Maximus II
2002-06-06 16:55
2002.08.12
Аналог TBitMap.LoadFromFile( xxxxx )


1-35306
dlK
2002-07-28 18:03
2002.08.12
TPanel.Caption





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский