potřebuji ve vlákně (používám Task) vytvořit změnšeninu obrázku pro vykreslování náhledu.
Vím, že se musí Canvas Locknout při hrabání z vlákna, ale jelikož obrázek může mít různý formát, k jeho načtení používám TPicture a pak se jaksi nedostanu na canvas.
Zde kód prováděný taskem
- Kód: Vybrat vše
var pic := TPicture.Create;
try
pic.LoadFromFile(self.soubor);
var bmpNahled := TBitmap.Create;
bmpNahled.Width := 200;
bmpNahled.Height := Round(Pic.Height / (Pic.Width / bmpNahled.Width));
bmpNahled.Canvas.Lock;
bmpNahled.Canvas.StretchDraw(Rect(0, 0, bmpNahled.Width, bmpNahled.Height), Pic.Graphic);
bmpNahled.Canvas.Unlock;
self.bmpNahled := bmpNahled;
finally
pic.free;
end;
Potřeboval bych zavolat něco jako
- Kód: Vybrat vše
Pic.Graphic.canvas.lock;
Takto se mi občas staně, že je náhled prázdný.
Obdobně pak při tisku samozřejmě.
Pro 20 obrázků se čas použitím vláken zkrátí ze 40s na 5s.
Popř. kdyby jste někdo používal nějakou knihovnu, která by toto zvládla.
Poslední možností je to přepsat do javy třeba, ale výhoda Delphi je prostě ta, že "exáč, kterej poklikají a jede"
Díky