Zdravím. Měl bych dotaz na knihovnu GDI+ a práci s ní přes .NET (ASP).
Takže - kdysi jsem měl problém s generování PNG, zmiňoval jsem se tady o tom. Vyřešeno to bylo tak, že jsem nejdříve nechal výstup zapisovat do MemoryStreamu a teprve potom jsem jeho obsah hodil do Response. PNG potřebuje funkci Seek, kterou Response samozřejmě nenabízí.
Dnes - máme tu aplikaci, která generuje obrázky, ale v některých případech nechutně pomalu (6 minut je zatím náš rekord). Ten čas určitě optimalizovat půjde, ale ze samé podtaty problému (generátor fraktálů a tapet do velikosti 3200*2400 :-) to stále bude poměrně pomalé. Chtěli bychom posílat obrázky po částech - tj. vygenerujeme osminu obrázku, pošleme ji uživateli a už generujeme druhou.
Jak ale? Nevíme. JPG myslím dělá obrázky po osmi pixelových čtvercích, takže bychom mohli po každých osmi pixelech zkomprimovat a poslat jen část MemoryStreamu, ale JPG nenabízí bezztrátovou kompresi, která je v tomto případě důležitá. Netušíme, jak se chová PNG. Máte někdo řešení?
A ještě něco. Nikdy nepoužíváme víc než 128 barev, ale netušíme, jestli jde přinutit kodér GIFu v knihovně GDI+ k tomu, aby si sám postavil svoji barevnou paletu nebo abychom mu nabídli svoji. Ten rozdíl je vidět třeba mezi komprimováním do GIFu v Malování (která ale používá staré GDI) a mezi Photoshopem. Malování tam hodí svoji vlastní paletu a vypadá to hnusně. Photoshop umožní nastavit libovolný počet barev a chytře se přizbůsobuje.
Jestli to nejde (a po několikerých zkušenostech s GDI+ a její oblíbenou hláškou "Něco je špatně." si to myslím), rád bych se pozeptal po nějakém rychlém externím .NETím kodéru GIFu, který to umí. Hmmm... A nebo po návodu, jak si takový kodér napsat :-)) |