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
