Recenze  |  Aktuality  |  Články
Doporučení  |  Diskuze
Auto-Moto
Mobilní telefony
Notebooky  |  Tablety
Příslušenství
Wearables  |  Ostatní
Svět hardware  |  Digimanie  |   TV Freak

Dynamické načtení velké bitmapy v .NET C# (PDA)

Squad_leader (13)|10.10.2007 18:42
Potřebuji v projektu .NET C# načítat v PDA velkou bitmapu.
Bohužel to je možné do velikosti cca 300 kB.

Provádí se to takto:

[CODE]pictureBox1.Image = new Bitmap("obrazek.jpg");[/CODE]

Bohužel větší obrázek na platformě typu PDA vede k tomuto násilnému ukončení programu:



Výhozí prohlížeč obrázků si poradí i s JPG, které zabírá 30MB !
Existuje však knihovna pro zobrazení zde:
http://www.codeproject.com/ce/PicView.asp

Moc prosím o co nejpřesnější ukázku případně alespoň navedení jak je možné tuto knihovnu implementovat do projektu .NET C#.

Pokud se tady někdo kdo to ví najde, budu nesmírně vděčný !
(nepotřebuji radu jak tuto vyjímku odchytávat a řešit)
RStein (2012)|20.10.2007 18:21
Ano, tohle je v CNF problem...
Zkusil jste primo zavolat API funkci SHLoadBitmap (pres Interop - DllImport)?
Squad_leader (13)|22.10.2007 21:13
S WinAPI nemám žádné zkušenosti, protože mi v porovnání s .NET přijde velice složité.
Zkoušet jsem to zkoušel, ale nepodařilo se mi ani založit project tak, aby načetl tu bitmapu.
WinAPI mi přijde tak složité, že se do něj bojím pouštět.
phacker (49)|23.10.2007 10:17
Co myslíš pod pojmem větší? Ale jsou-li to řádově MB, tak nejspolehlivější bude napsat si vlastní parser, nebo použít nějaký z netu a opravdu načítat jen kousky co zobrazuješ.
Squad_leader (13)|23.10.2007 16:18
[QUOTE="phacker"]Co myslíš pod pojmem větší? Ale jsou-li to řádově MB, tak nejspolehlivější bude napsat si vlastní parser, nebo použít nějaký z netu a opravdu načítat jen kousky co zobrazuješ.[/QUOTE]

Prosím,
hledám zde konkrétní radu a ukázku postupu.
Vaše odpověď je vyloženě návrh na postup, ale není konkrétní.

Pokud jsem knihovny .NET pochopil správně tak ten Váš výřez, který navrhujete se dělá tak, že se načte bitmapa a z ní se potom udělá ten výřez.

Což vede na tento postup, konkrétně:

[CODE]new Bitmap("obrazek.jpg"); // Slouží pro načtení [/CODE]

Bohužel potíže jsou zakopány už v tomto řádku.
Jenom tak ze srandy jsem natahl do PDA JPG o komprimované velikosti 30MB a výchozí prohlížeč jej dokázal zobrazit bez problému.
phacker (49)|23.10.2007 16:30
Ne. Finta je v tom, si spočítat na kterém místě v souboru leží část obrázku kterou je potřeba načíst a vytáhnout právě jen ten kus.
Resp. je potřeba zobrazit celý obrázek, nebo jen výřez?
Squad_leader (13)|23.10.2007 17:34
[QUOTE="phacker"]Ne. Finta je v tom, si spočítat na kterém místě v souboru leží část obrázku kterou je potřeba načíst a vytáhnout právě jen ten kus.
Resp. je potřeba zobrazit celý obrázek, nebo jen výřez?[/QUOTE]

Tak ještě jednou děkuji za zájem.
Jak jsem už psal jedná se o projekt v .NET C# pro Pocket PC a mělo by se jednat o modul pro prohlížeč obrázků (open source, nic později placeného ;) )

Zkrátka hledám nejjednodušší cestu jak zobrazit obrázek, který si uživatel zvolí na jeho PDA. Pokud by nutností bylo zobrazit jen část obrázku tak se podřídím.

Jak už jsem psal. Prohledal jsem spoustu anglických fór a nikde to nevyřešili.

Takže jak píši účelem je, aby si uživatel načetl bitmapu, jejíž parametry jsou naprosto neznámé v době spuštění programu.
Proto nějaká finta jak si obrázek staticky rozdělit na několik "tabulek" a ty například poskládat k sobě je zcela vyloučena :(

I když pokud znáte způsob jak zobrazit např. část "velkého" obrázku, tak aby nedošlo k vyvolání vyjímky "out of memory exception" tak jsem jedno ucho.
phacker (49)|23.10.2007 23:36
Bez znalosti kontextu těžko radit. Resp. chápu co je třeba, ale aby se řešení dalo zasadit do výsledného projektu, potřeboval bych vědět víc. Můžu když tak napsat kus kódu, který si bitmapu "ošahá" a udělá z ní nějaký rozměrově přijatelný náhled. A jedná-li se o open source, mohu nabídnout též svou participaci. Má projekt web?
Squad_leader (13)|24.10.2007 10:34

Žádné megalomanské ambice (podle zkušeností) nemám a dovolil bych si Vás kontaktovat navečer přes ICQ pokud by Vám to nevadilo ve 20:00 h ;)
phacker (49)|24.10.2007 10:49
Kdykoliv mezi 8:00 a 24:00 :-)