Virtual Frame Buffer
8 отговора
245 прегледа
Virtual Frame Buffer
Zna4i, kakjv e problema tozi pjt!
Mnogo mi e interesno kak moje da se napravi virtual frame buffer?
Toest, imam predvid da se risuva v nqkakyv u4astyk v pametta, i sled tova
gotovata "grafika" da se pokaje izvednyj!
Ne6to kato Virtual Screen za DOS.
Blagodarq na vsi4ki!
Mnogo mi e interesno kak moje da se napravi virtual frame buffer?
Toest, imam predvid da se risuva v nqkakyv u4astyk v pametta, i sled tova
gotovata "grafika" da se pokaje izvednyj!
Ne6to kato Virtual Screen za DOS.
Blagodarq na vsi4ki!
Re: Virtual Frame Buffer
Ако въпроса е за Windows с използване на стандартната библиотека GDI, и аз зная как става; стандартно.
Първо си създаваш един Device Context (DC) с помощта на HDC memDC = CreateCompatibleDC(...); като указваш с един от параметрите новото DC да е съвместимо с екрана. След това си създаваш един Bitmap например с функцията HBITMAP hBitmap = CreateCompatibleBitmap(memDC,...) с необходимия размер и слагаш така създадения hBitmap в създадения преди това memDC; става с API функцията SelectObject(memDC, hBitmap). От тук нататък рисуваш в твоя виртуален memDC със всички средства от GDI като LineTo(memDC, ...), Ellipse(memDC, ...); рисунката се получава в hBitmap, т.е. в паметта, а не на екрана. Най-накрая, в момент който пожелаеш може да покажеш рисунката в някой прозорец: вземаш реалното DC на този прозорец с функцията HDC hDC = GetWindowDC(hWnd) и копираш Bitmap-а от виртуалното DC в него с функцията BitBlt(hDC,...,memDC,...) или даже StrechBlt(hDC,...,memDC,...) ако искаш да мащабираш.
Аз съм го ползвал и има смисъл това нещо, понеже GDI не работи много бързо и понякога се получава премигване на екрана; ако рисунката се подготвя в паметта предварително и се хвърля на екрана с единствено BitBlt, user-a не забелязва междинните графични операции и няма премигване; обаче харчи повече памет, естествено.
Това са стардартни функции от Windows API и трябва да мoже стане с VC++, VB или Delphi. Ако ти е за MFC, в него има аналогични функции-wraper-и трябва да ги знаеш. Ако е за друга "платформа", извинявам се за празните приказки. Предположих, че питаш за това нещо.
Първо си създаваш един Device Context (DC) с помощта на HDC memDC = CreateCompatibleDC(...); като указваш с един от параметрите новото DC да е съвместимо с екрана. След това си създаваш един Bitmap например с функцията HBITMAP hBitmap = CreateCompatibleBitmap(memDC,...) с необходимия размер и слагаш така създадения hBitmap в създадения преди това memDC; става с API функцията SelectObject(memDC, hBitmap). От тук нататък рисуваш в твоя виртуален memDC със всички средства от GDI като LineTo(memDC, ...), Ellipse(memDC, ...); рисунката се получава в hBitmap, т.е. в паметта, а не на екрана. Най-накрая, в момент който пожелаеш може да покажеш рисунката в някой прозорец: вземаш реалното DC на този прозорец с функцията HDC hDC = GetWindowDC(hWnd) и копираш Bitmap-а от виртуалното DC в него с функцията BitBlt(hDC,...,memDC,...) или даже StrechBlt(hDC,...,memDC,...) ако искаш да мащабираш.
Аз съм го ползвал и има смисъл това нещо, понеже GDI не работи много бързо и понякога се получава премигване на екрана; ако рисунката се подготвя в паметта предварително и се хвърля на екрана с единствено BitBlt, user-a не забелязва междинните графични операции и няма премигване; обаче харчи повече памет, естествено.
Това са стардартни функции от Windows API и трябва да мoже стане с VC++, VB или Delphi. Ако ти е за MFC, в него има аналогични функции-wraper-и трябва да ги знаеш. Ако е за друга "платформа", извинявам се за празните приказки. Предположих, че питаш за това нещо.
Re: Virtual Frame Buffer
... taka de...
interesno bi bilo da se raboti s 2 ekranni stranici!
taka akkto se rabotese na 8micata!
i taka kakto moje da se rbaoti s vsekja VGA karta!
samo deto GDI-to ne go poddarja!
trebva d apsikas OpenGL ili directX! koeto e draznesto, ako prosto iskas da risuvas barzo prosti raboti za koito GDI-to e dostatacno!
ama toia vapros sam go povdigal vece...
interesno bi bilo da se raboti s 2 ekranni stranici!
taka akkto se rabotese na 8micata!
i taka kakto moje da se rbaoti s vsekja VGA karta!
samo deto GDI-to ne go poddarja!
trebva d apsikas OpenGL ili directX! koeto e draznesto, ako prosto iskas da risuvas barzo prosti raboti za koito GDI-to e dostatacno!
ama toia vapros sam go povdigal vece...
Re: Virtual Frame Buffer
vsyako API koeto ti pozvolyava da chertaesh, bi tryabvalo da ti pozvolyava da cheratesh i v offscreen buffer. Vsashtnost, taka e NORMALNO da se pravi, inache izglejda grozno, osobeno ako iskash chesto da update-vash informaciyata koiato pokazvash. Taka che otgovora e RTFM.
Re: Virtual Frame Buffer
Ех, CALL-151, и аз си спомням 8-мицата и първите PC-та; и колко беше лесен програмисткия живот тогава :) Сега човек трябва да се обляга на "абстракции" като Device Context, GDI, или средствата на DirectX или OpenGL които не разбирам. Нормално, понеже пазара (на хардуера) бълва огромно разнообразие, и всеки му е нужна една __стандартна__ абстракция, защото е непосилно да бъркотиш на ниско ниво във всевъзможни видео-платки, въпреки че те си имат бая памет и даже процесори които имплементират DirectX.
Дадох такъв отговор, понеже това съвпада с моя начин на работа, научен преди време ... сега вече бягам от гадния и тежък Windows щото областта на embedded ми допада повече и ми се вижда, че в него живота ми е по-прост; още не е станал толкова печеливш бизнес, но се надявам да стане :)
Дадох такъв отговор, понеже това съвпада с моя начин на работа, научен преди време ... сега вече бягам от гадния и тежък Windows щото областта на embedded ми допада повече и ми се вижда, че в него живота ми е по-прост; още не е станал толкова печеливш бизнес, но се надявам да стане :)
Re: Virtual Frame Buffer
... to kato stane pecelivs, sa se razvali! sa stane kato windows!!!
Re: Virtual Frame Buffer
... не думай, защото няой видили че има бизнес някъде веднага търчи в такава посока :) Но няма страшно да ни се случи на нас скоро -- промишлеността в българия е в криза, а тя е консуматор на този бизнес ... а и на Windows. Все пак Windows могат да го ползват и секретарки и счетоводители и геймари ... колегите занимаващи се с новите програмистки средства разполагат с много по-широко жизнено пространство -- завиждам им :)