
.NET C#: Dynamicke nacitani JPG do bitmapy
Asi se ptám zbytečně, ale říkám si za zkoušku nic nedáš.
Když si vytvoříme bitmapu:
System.Windows.Forms.PictureBox pictureBox1;
Tak do ní lze následně nahrávat obrázky v (prakticky) libovolném formátu:
pictureBox1.Image = new Bitmap("obrazek.jpg");
Tato funkce pracuje správně ve Windows na PC.
Na Windows mobile ovšem pracuje správně jenom občas.
Pokud obrázek není větší než zhruba 300 kB pracuje dobře všude.
Pokud je ovšem větší (typicky kvalitní fotografie např. 700 kB)
Na PC to pracuje perfektně. Ovšem na Windows Mobile se děje toto:
Pokud znáte způsob jak na Windows mobile je možné tuto hranici překonat
sdělte mi to prosím.
Hlavně ať prosím odpovidá někdo kdo ví o čem mluví. Radu typu udělej si dekodérové knihovny pro
formáty typů JPG nechci slyšet.
Díky
Približne 700kB JPG zodpovedá 2Mpx fotke, ktorá celá v pamäti zaberá cca. 6MB (1600x1200x24). To je na PDA celkom dosť, takže budeš potrebovať nejakú knižnicu, ktorá nenahráva do pamäte celý obrázok ako System.Drawing.Image.
Konkrétnu knižnicu neporadím, pretože som také niečo zatiaľ nepotreboval, ale snáď niečo schopné cez Google nájdeš.
Ufff. No dobře. Už jsem ale progoogloval asi hodinu.
Ak vie ten obrázok zobraziť Pocket IE, môžeš skúsiť použiť rovnaký spôsob pomocou použitia knižnice imgdecmp.lib. Pozrel by som sa na prehliadač obrázkov, či to zvládne.
Bere to. Ale fakt nechci dělat v C++. Nerozumím tomu prostě.
Snad existuje způsob jak píše níže.
Implementovat do C# C++ by asi byla moje smrt.
Neviem či sa dá tomu nejako vyhnúť, skôr skontroluj buď na emulátore akú máš pridelenú pamäť alebo v PDA skontroluj aké máš množstvo vyhradenej pamäti na aplikácie.
Ako vidím, ty obrázok BITMAPU asociuješ do pic.boxu, skús najprv vytvoriť bitmapu a priamo ju zmenšiť a následne asociovať do pic.boxu. Teoreticky by to malo ísť, potom daj vedieť.
Ja osobne robím pod ASP.NET a VB.NET - Visual Basic a nie C#.
Paměť jsem přiděloval co to šlo jak na PDA tak na emulatoru.
Výsledek stejný. (Přeplnění vyhrazeného bufferu ? )
Zkouším:
Ale už po přídání tohoto bloku (bez použítí) to píše 4 errory:
error CS1502: The best overloaded method match for 'System.Drawing.Graphics.DrawImage(System.Drawing. Image, int, int, System.Drawing.Rectangle, System.Drawing.GraphicsUnit)' has some invalid arguments
error CS1503: Argument '4': cannot convert from 'int' to 'System.Drawing.Rectangle'
error CS1503: Argument '5': cannot convert from 'int' to 'System.Drawing.GraphicsUnit'
error CS0144: Cannot create an instance of the abstract class or interface 'System.IO.Stream'
Takže... musím prostudovat manuál asi...
Skús pozrieť na internete zmenšenie obrázka. Potom napíš ako si dopadol
Zasekl jsem se.
Protože už tento řádek dělá tu chybu:
Jestli jsem to pochopil tak tím je ten tvůj nápad nepoužitelný.
Slyšel jsem, ale už něco o streamu.... snad to načítat nějak tak jestli o tom něco nevíš poradit.
P5esto d9kz !
Do streamu sa dá, len potom zase - ako ho zmenšíš poprípade vykreslíš? Tak či tak ho načíta do pamäti. Keďže mám ale v PDA program na obrázky, ktorý nemá problém so zobrazením väčšieho obrázka (ale nie je napísaný pod .NET ale klasicky pod Win32), tak to musí ísť aj takto. Skôr by som ti doporučil použiť nejakú štandardnú DLL knižnicu v PPC na upravenie veľkosti (nie .NET knižnicu).
Dobře a víš tedy o nějakém článku jak se pracuje s knihovnama pro Win32 v .NET ?
Pozri sa po nejakých COM komponentách, tie jednoducho načítaš v .NET. Doporučujem ti pogoogliť.