Vítejte !   Přihlášení | Registrace
Hlavní menu
CATIA fórum.cz
Novinky
Seriál CATIA
Obecně o CAD
Novinky ze světa DS
Makra pro CATIA V5
Diskuse
Vytvořit téma
Koncepty
Seznam oblíbených
Soukromé zprávy
Pravidla
Live CHAT
VIP žádost
Základy Catia
Ke stažení
Doporučujeme
Pracovní příležitosti
Reklama a kampaně
O fóru
Nápověda

Načtení JPG náhledu z CATPart souboru

Kompletní přehled příspěvků v tématu Načtení JPG náhledu z CATPart souboru řazený podle data jejich publikace na fóru.

UživatelPříspěvek
Ivan Červený

Poslat zprávu | Profil
Datum: 2.1. 2016 | Zobrazeno: 9120x
Konfigurace CATIA: V5 R19

Text dotazu:
Dobrý den,
pro načítání JPG náhledů z CATPartů používám následující kód. Problém je ten, že načítání trvá poměrně dlouho - v souboru se hledá začátek JPG (byty FF,D8) a konec (FF,D9) po jednotlivých bytech. Zatím to řeším samostatným vláknem, kde se náhledy donačítají až následně. Neměl by někdo nápad jak načítání zefektivnit? Je to podle mě totiž docela zajímavé řešení jak vizuálně přiblížit obsah CATPartu třeba při výběru.



Public Function GetImageFromCatiaFile(infile As String) As Image

Try

Dim xByte As Byte

Dim bPicEnd As Boolean

Dim fs_in As New FileStream(infile, FileMode.Open, FileAccess.Read)
Dim br As New BinaryReader(fs_in)

Dim fs_out As New MemoryStream()

Dim bw As New BinaryWriter(fs_out)

While Not (br.BaseStream.Position = br.BaseStream.length) And Not bPicEnd
xbyte = br.ReadByte
If xbyte = 255 Then ' FF
xbyte = br.ReadByte
If xByte = 216 Then ' D8
xbyte = br.ReadByte
If xByte = 255 Then ' FF
bw.Write(CType(255, Byte))
bw.Write(CType(216, Byte))
bw.Write(CType(255, Byte))
While Not (br.BaseStream.Position = br.BaseStream.length)
xbyte = br.ReadByte
bw.Write(CType(xbyte, Byte))
If xByte = 255 Then ' FF
xbyte = br.ReadByte
If xByte = 217 Then ' D9
bw.Write(CType(xbyte, Byte))
bPicEnd = True
Else
bw.Write(CType(xbyte, Byte))
End If
End If
End While

End If
End If
End If

End While

Dim img As Image = Image.FromStream(fs_out)

br.Close()
bw.Close()
fs_in.Close()
fs_out.Close()

Return img

Catch
Return Nothing
End Try

End Function

Ing Jan Cinert

Poslat zprávu | Profil
[#5548] | Publikováno: 03.01. 2016 - 10:43
Dobrý den,

zajímavé řešení, já jsem tohle zatím nikdy neřešil. Z vaší kuchyně nebo jste někde čerpal?

Co se týká rychlosti čtení, jediné co mě napadá, je jít přímo po bytech s adresou obrázku. Pokud je obrázek na začátku souboru, pak by to bylo skoro jedno a načtení bude trvat pokaždé stejně dlouho, ale jestli je pokaždé někde jinde a prochází se větší množství dat, pak to dává smysl. Zkoušel jste testovat dobu načtení v závislosti na velikosti souboru?
Ivan Červený

Poslat zprávu | Profil
[#5552] | Publikováno: 04.01. 2016 - 17:34
Čerpal jsem z nějakého německého fóra, kde byl kód ve VBA, takže jsem jej jenom přepsal pro VB.net a trochu optimalizoval. Velikost obrázku je pokaždé jiná v závislosti na složitosti modelu. Zatím tedy asi zůstanu u mého řešení se samostatným vláknem.
Pavel Krsek

Poslat zprávu | Profil
[#5553] | Publikováno: 05.01. 2016 - 06:53
Dobrý den,
velmi zajímavý script. Ani jsem nevěděl, že catpart má v sobě již ukrytý previw.
Nevíte, zda-li se nechá někdě v catii implicitně nastavit rozlišení danéno preview? Aktuální vlastnosti preview viz. obr.. Potřeboval bych dané rozlišení zvětšit!

Děkuji.

Přiložené obrázky:

Ing Jan Cinert

Poslat zprávu | Profil
[#5554] | Publikováno: 05.01. 2016 - 09:32
Tyto hodnoty jste získal z extrahovaného obrázku?

Velikost tedy není nic moc, pro náhled v průzkumníku OK, jinak už to je skoro k ničemu. Otázka je z čeho a podle jakého nastavení se tvoří náhled. kdyby to bylo jako v případě STL, tak by roli hrála přesnost zobrazení. Možná by stálo za to to vyzkoušet - několikrát přeuložit model s různou přesnotí a sledovat velikost náhledu. Kdyby byl náhled kvalitnější, dal by se lépe scalovat.


Uživatel nepřihlášen

Pro zobrazení obsahu stránky / provedení akce (vytvoření nového téma, napsání odpovědi do diskuse apod.) musíte být přihlášeni.