Avatar billede delphi Nybegynder
23. marts 2001 - 09:18 Der er 8 kommentarer og
1 løsning

Hurtig metode til at tegne et bitmap

Jeg skal lave en application hvor jeg tegner nogle frames fra et kamera på en form.  Dataene modtager jeg i Bitmap format i en opløsning på 640*480*24bit, men jeg har brug for at lave nogle beregninger, bl.a. for at lave høj kontrast, kunstige farver mv.  - Det er nu ikke noget særligt problem.  Problemet er, at billederne skal tegnes på formen i real-time, dvs. 25 billieder/sec for PAL eller 30/sec for et NTSC kamera.  Med andre ord, så skal jeg tegne et nyt bitmap for hver 33 msec.  Det er dog ikke sådan, at det gør noget specielt, hvis en enkelt fram mistes i ny og næ - men brugeres skal have opfattelsen af at tingene sker i real-time.
Hvis jeg benytter Delphi\'s Canvas.Draw method (eller Windows BitBlt) til at tegne et bitmap, så vil det, afhængigt af hvilken PC jeg benytter, tage mellem 7 og ~30 mSec at tegne et billede. 
Hvis brugeren har forstørret sin form til full screen size, fx. 1280 * 1024, så skal billedet stretches til at fylde formens fulde Client Area.  Hertil har jeg forsøgt mig med Canvas.StretchDraw (eller windows\' tilsvarende StretchBlt), så tager det pludseligt mellem 48-150 msec at tegne billedet - altså klart for længe.

Jeg efterlyser altså en metode til hurtigere at få skubbet nogle data over på skærmen.

Bemærk at der er krav til at der skal kunne anvendes en tredieparts softewarepakke (et forstørrelses program kaldet Lunar fra Dolphi Ltd).  Dette program kan tilsyneladende ikke ses ændringer af windows skærmbilledet, hvis disse ændringer er sket \'bag om Windows\' (så og sige), fx. ved at bruge DirectDraw.

Jeg er med på alt hvad folk kan foreslå, fx. hvis nogen kan vise hvorledes man kan opprioritere tegne operationer eller lignende.  Jeg har prøvet forskellige tiltag, fx. at lade sleve opdateringen foregå i egen thread etc, men altså uden held.


Peter
Avatar billede wisen Nybegynder
23. marts 2001 - 09:41 #1
Avatar billede delphi Nybegynder
23. marts 2001 - 09:51 #2
Nå, min kommentar er åbenbart ikke kommet igennem, så jeg prøver igen...

Jeg sad netop og kiggede på http://www.eksperten.dk/spm/58389, hvor pellelil netop har bragt det link du nævner.  Jeg har nu downloaded Graphics32 pakken og vil se om det er sagen.

Peter

PS: BorrisHolt havde sendt mig noget via baglinie, så i andre behøver ikke tro, at han er blevet syg, blot fordi han endnu ikke har svaret her på eksperten :)
Avatar billede martinlind Nybegynder
23. marts 2001 - 11:16 #3
Avatar billede dj Nybegynder
23. marts 2001 - 12:22 #4
En af mine venner har udviklet en stor opensource DIB component pakke, alle grafik og tegnemetoder er lavet i ASM og den kan tegne billeder med hastigheder sammenlignelige med DirectX (uden at den dog går uden om Windows).

Du kan kigge lidt på pakken her:
http://www.stuckindoors.com/dib/index.html

Og evt. se en demonstration af pakken her:
http://www.stuckindoors.com/dib/downloads.html#demos

Jeg vil tro at disse componenter vil kunne leve op til hastighedskravende og derudover er de freeware og må anvendes til commerciel brug.

Mvh. _DJ_ / Daniel Møller
Avatar billede pstric Nybegynder
23. marts 2001 - 12:35 #5
I fraktal konkurrencen på community.borland.com for et års tid siden var der en der brugte en FastDIB unit. Jeg prøver lige at finde et link.

http://homepages.borland.com/ccalvert/Contest/MarchContest/Fractal/FractalEntries.html
Den første løsning (Hugh Allen) bruger FastDIB. Prøv at kigge lidt på den. Jeg ved ikke om det er freeware.
Avatar billede delphi Nybegynder
26. marts 2001 - 08:23 #6
Jeg har nu kigget på og afprøvet Graphics32 uniten.
Det korte af det lange er, at den ikke tegner en Bitmap hurtigere end Delphi selv (faktisk er den en lille anelse langsommere på mine maskiner).  Det er muligt at TBitmap32 komponenten er god til at lave en masse \'behandling\' af billeder (før de vises), men selv \'tegningen\' på en forms canvas foregår stadig med et alm. BitBlt kald - og det har jeg allerede afprøvet.

pstric> Jeg har ikke haft tid til at kigge efter den FastDIB ting, men det vil jeg gøre senere.

Peter
Avatar billede delphi Nybegynder
26. marts 2001 - 08:25 #7
dj> Jeg kender dib pakken - dvs. jeg kan huske at jeg har set de demobilleder før.  Den må ligge et sted på mit D-drev :)

Peter
Avatar billede delphi Nybegynder
23. april 2001 - 08:40 #8
Alle de nævnte pakker benytter alm. BitBlt (eller stretch varianten) windows kald til at tegne bitmap\'s på skærmen.  Disse funktioner er simpelt hen ikke hurtige nok til at tegne 30 bitmaps/sekund.

desværre..


Peter
Avatar billede delphi Nybegynder
14. juni 2001 - 15:20 #9
Jeg lukker spørgsmålet nu - dog er det desværre ikke fordi jeg har fundet en løsning....

Peter
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