Avatar billede tax Nybegynder
08. januar 2002 - 10:40 Der er 1 kommentar og
1 løsning

Direkte manipulering af bitmap?

Jeg er kommet til et punkt i mit projekt, som går ud på at bygge en flowsimulator for tynde rør, hvor windows standard GDI er for langsomt. Det æder 90 procent af min CPU under runtime.

Jeg har ikke lyst til at omstrukturere helt og implementere directdraw, da jeg ikke har tid. (Implementering en skal efter tidsplanen være førdig igår!) Derfor har jeg ladet mig fortælle at jeg kan tilgå et bitmap i hukkommelsen direkte, men har svært ved at finde info derom.

Det er noget med at man skal låse positionen af bitmappet? for derefter at kunne tilgå bitmappen igennem et offset (x+y*\"Width\")??

Anyone?
Avatar billede soepro Nybegynder
08. januar 2002 - 11:10 #1
Du kan tilgå den enkelte pixel direkte via Getpixel og PutPixel funktionerne (som tager x,y relativt i fht. bitmappens placering.)

Du ville vel i princippet kunne gøre det samme via DeskToppen\'s canvas (DC/Device Context).

Jeg har prøvet noget der ligner via C++ Builder, hvor DeskToppens TCanvas kan tilgås direkte - men udover at jeg så -i baggrund- kunne få en lille figur til at piske tværs over skærmen, virker det meget langsommere end at bede Windows API\'et om at få \"kylet\" en bitmap på skærmen.

Men ... hvis det du skal tegne består af få bits i fht. det totale antal bit i hele bitmappen, kan du da sikkert spare noget. (Men tegning af 1 pixel er ca. en faktor 10 mere krævende end tegning af hele bitmappen stod der et eller andet sted i min dokumentation, så det skal være mindre end 10% af bitmappen du står og ændrer.)
Avatar billede jar Nybegynder
16. januar 2002 - 20:02 #2
Når du har sat ddraw op med surface(s), kan du låse backbufferen (eller fronbufferen, hvis du kun har en) med IDirectDrawSurface::Lock() der får du en pointer og en pitch (din \"Width\"), hvorefter du så tegner hvad du skal, kalder IDirectDrawSurface::Unlock() (og Blt()/Flip()\'er, hvis du har mere end en buffer), se dx 7 sdk\'et for mere info. En anden (og meget lettere måde) er at anvende tinyptc (http://www.gaffer.org/tinyptc), der ligger et simpelt eksempel med, der viser, hvordan man anvender det.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester