Delphi > Firemonkey

FMX, Canvas a vlanka

(1/2) > >>

raul:
Zdar a silu,

pouzivam RVMedia komponenty pro prijem dat z IP camery, ty nasledne zpracovavam ihned po prijeti a posleze zobrazuji. Prave v eventu prijeti, spoustenem v kontextu zpracovavaciho vlakna potrebuji do obrazku nakreslit kalibracni data. Dokud jsem provozoval kameru jednu, vse ok, ale nyni nahodne dochazi k prehozeni obrazu jednotlivych kamer (problik snimku kamery1 do kamery2) apod.


--- Kód: Delphi ---  var    bmp: TBitmap := ABitmap.getBitmap;  if bmp.Canvas.BeginScene then  begin    bmp.Canvas.Stroke.Thickness := 2 * bmp.Canvas.Stroke.Thickness;    bmp.Canvas.Stroke.Color := TAlphaColorRec.Green;     for x := 1 to cnt do    begin      var        x1: Single := map(x, 1, cnt, 0, bmp.Width - 1);      bmp.Canvas.DrawLine(pointf(x1, 0), pointf(x1, bmp.Height), 0.5);       bmp.Canvas.Stroke.Kind := TBrushKind.bkSolid;      bmp.Canvas.Stroke.Thickness := 1;      bmp.Canvas.Fill.Color := TAlphaColors.Green;      bmp.Canvas.Font.Size := 36;      bmp.Canvas.Font.Family := 'Arial';      bmp.Canvas.Font.Style := [TFontStyle.fsbold];      bmp.Canvas.FillText(RectF(x1 - 15, 0, x1 + 15, bmp.Height - 100), IntToStr(x - (cnt div 2) - 1), false, 1, [], TTextAlign.taCenter);    end;   bmp.EndScene;    ABitmap.Assign(bmp); end; 
Posleze dojde k uprave obrazu filtry (pres transformacni matrici, tzn uz nejde o zmenu obrazku, ale vicemene jen prehazovani pixelu v pameti). Kdyz Vyse uvedeny kod zakomentuju, k problemum nedochazi.
Je tedy canvas pouzitelny jen v hlavnim vlakne ? Jak to tedy dnes resit - v dobe 64 jadrovych CPU s potrebou realtime upravy obrazu z kamer ? Mam tedy pouzit jine komponenty nez klasiku ?

vandrovnik:
V seznamu novinek nějaké nedávné verze viděl, že je tBitmap už threadsafe: http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Multi-Threading_for_TBitmap,_TCanvas,_and_TContext3D
Nepoužíváš nějakou verzi, kde to ještě threadsafe neměli?

raul:
Nene, aktualni 10.3.x (3 nebo 4, proste posledni). Je mi to divny, preci jen po tom nechci zas tak moc na dnesni dobu. Na grafiku pouzivam gr32 ci jine, ale ted jde jen o to nakresleni car apod - at je videt dopad efektu, tak jsem pouzil tohle. Jako kdyz to nepude, vyrendruju si to sam primo do obrazovych dat, ale.. Chtel jsem si ujednodusit praci (je to docasny kod).

< z >:
Doba se nezmenila. Synchronizace je stále třeba, jen je to asi v nové verzi uživatelsky méně náročné.

Zkus se zaměřit na výběr bitmapy, do které kreslíš. Třeba není problém v canvasu :)

raul:
Bitmapa mi prijde z kamery z RVMedia komponent, tu bych mel mit zde moznost zmenit bez problemu neb neni vubec zobrazena, po ukonceni teto metody se to vraci k rvmedia, ktery ji pak vykresluje. Dokud do ni pres canvas nekreslim, je vse ok. (Hlavni uprava spociva ve filtrech px' = px puvodni).

Navigace

[0] Seznam témat

[#] Další strana

Přejít na plnou verzi