Kreslení do bitmapy   otázka

VB.NET, WinForms

provádím vykreslení do bitmapy. Bitmapa je globální (potřebuji ji v různých metodách) a kreslení volám v samostatné metodě kde vytvářím objekt graphics from image pomocí using.

A zde je problém, pokud se vykreslení provede rychle za sebou nebo se volá z více vláken, tak mi to někdy hodí vyjímku, že se snažím vytvořit objekt, který už existuje (grasphics). Jak tedy na to? napadlo mě nedělat to přes using, ale vždy sám zavolat dispose a při vytváření graphocs si nějak zjistit, zdali už náhodou plátno neexistuje, ale nevím jak... a nebo na to jít úplně jinak??

Předem díky za pomoc.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A co si třeba tahle tu proměnnou před zápisem do ní ve vláknu zamknout ?

Synclock PromennaBitmapa
  'Tady se s ní něco děje
End SyncLock

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ale ja nemam problem s bitmapou, problem je s graphics vytvořeným z bitmapy. ten vytvářím vždy kdyř potřebuji kreslit a problém je, když potřebuji kreslit a ještě neskončilo předchozí kreslení.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vytvářet ho vždy je blbost. Vytvořte ho pouze jednou a někde ho udržujte, pro případ přístupu z více vláken použijte výše uvedený SyncLock, ale na tomto Graphics objektu.

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

to znamená vytvořit objekt Graphics stejně jako Bitmap na globální úrovni? Je to optimální? Všude se doporučuje objekty z GDI+ uvolňovat co nejdříve, optimálně by měly být v using

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ano. Bude to mnohem rychlejší než to pokaždé vytvářet znovu. V tomto případě by měla být životnost objektu Graphics stejná jako u bitové mapy, ze které ho vytváříte.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback