Autor
|
Thema: thumbnails auslesen (5931 mal gelesen)
|
crinuy Mitglied Student
Beiträge: 19 Registriert: 17.02.2005
|
erstellt am: 25. Jan. 2006 16:38 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, ich hab keine Ahnung, ob ich hier in dem richtigen Forum gelandet bin, aber ich hoffe es doch mal. Und zwar werden doch im Windows Explorer, wenn man die Ansicht auf Miniaturansicht stellt, auch von Parts und products eine Miniaturansicht geliefert. Kennt von euch jemand eine Möglichkeit, diese Thumbnails zu extrahieren und als Bilddatei zu speichern? Mögliche Lösungen am besten in vb6, aber auch vb.net, C etc. Bin für alles dankbar. mfG, Christoph [Diese Nachricht wurde von crinuy am 27. Jan. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 25. Jan. 2006 16:52 <-- editieren / zitieren -->
|
Steffen Hohmann Mitglied
Beiträge: 446 Registriert: 06.03.2002
|
erstellt am: 26. Jan. 2006 09:37 <-- editieren / zitieren --> Unities abgeben: Nur für crinuy
Hallo Christop, das Auslesen der Vorschaubilder ist eigentlich ganz einfach. Diese Bilder sind im CATIA-Dokument schon im JPG-Format gespeichert. Jede JPG-Datei hat eindeutige Start-Bytes und End-Bytes. Diese sind immer gleich. Also sucht man binär im CATIA-Dokument nach diesen Byte-Folgen und extrahiert diese dazwischenliegenden Bytes in eine Datei und schon hat man das Vorschaubild. Hier der Code für die Extraktion (Ist nur der erste Schuß und kann sicherlich noch verbessert werden, insbesondere die Suche nach der Byte-Folge) Sub Main() Const CATIAFile = "C:\MODELL_04.CATPart" ' CATIA-Dokument Const JPGFile = "C:\MODELL_04.jpg" 'Datei für Vorschaubild Const JPG_HEADER = "ÿØÿà" 'Byte-Folge für Anfang einer jpg-Datei Const JPG_END = "ÿÙ" 'Bytefolge für das Ende einer jpg-Datei Dim JPG_START_REC As Long Dim JPG_END_REC As Long Dim FileNumber As Integer Dim JPG_ARRAY() As Byte FileNumber = freefile Dim InputData As String InputData = String(4, " ") Open CATIAFile For Binary Access Read As #FileNumber Dim FileRec As Long FileRec = 1 Do While Not EOF(1) Get #FileNumber, FileRec, InputData FileRec = FileRec + 1 If InputData = JPG_HEADER Then JPG_START_REC = FileRec If JPG_START_REC <> 0 And Left(InputData, 2) = JPG_END Then JPG_END_REC = FileRec Exit Do End If Loop If JPG_START_REC <> 0 Then ReDim JPG_ARRAY(JPG_END_REC - JPG_START_REC + 1) Get #FileNumber, JPG_START_REC - 1, JPG_ARRAY Else MsgBox "Keine Vorschau in CATIA-Modell vorhanden!" 'Nicht alle CATIA-Dokumente haben ein Vorschaubild End If Close #FileNumber FileNumber = freefile Open JPGFile For Binary Access Write As #FileNumber Put #FileNumber, , JPG_ARRAY Close #FileNumber End Sub Gruß Steffen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Izle Mitglied Anlagen und Vorrichtungskonstruktion
Beiträge: 22 Registriert: 28.07.2005
|
erstellt am: 26. Jan. 2006 21:47 <-- editieren / zitieren --> Unities abgeben: Nur für crinuy
Hallo Steffen, das ist ein sehr interessanter Code. Ich habe nur eine Frage. Was ist das für eine Skriptsprache? Ist oft schwer nachzuvollziehen, wenn man die Programmiersprache nicht kennt. Gruss Izle Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kai Knospe Mitglied Problemlöser
Beiträge: 27 Registriert: 27.01.2006 R18SP2 // XP SP2 auf HP xw4600<P>R16SP3 // HP-UX auf HP c8000
|
erstellt am: 27. Jan. 2006 07:48 <-- editieren / zitieren --> Unities abgeben: Nur für crinuy
ÿØÿà !?! Ich fass´ es nicht!!! ÿØÿà ist keine Bytefolge sondern eine Folge von ASCII-Zeichen nach der nicht gunbedingt gesucht werden sollte!!! Wer wirklich sicher nach diesem Vorschaubild suchen will, sucht nach der Hexadezimalfolge "FF D8 FF" die den Start eines JPEG markieren. Das JPEG-Ende wird mit "FF D9" markiert. Im Anhang ist mal ein kleines Windows-Tool angehängt, welches ich letztens als Weihnachtsgimmick im Bekanntenkreis verteilt habe ;-) Gruß Kai Knospe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Steffen Hohmann Mitglied
Beiträge: 446 Registriert: 06.03.2002
|
erstellt am: 27. Jan. 2006 09:06 <-- editieren / zitieren --> Unities abgeben: Nur für crinuy
@Izle: Das ist Visual Basic @Kai Knospe: Selbstverständlich ist "ÿØÿà" keine Bytefolge sondern eine Zeichenkette. Ich wollte hier auch nicht ein fertiges Programm anbieten, sondern einfach eine Idee aufzeigen, mit der man das angefragte Problem lösen kann. Dieses Stück Programm ist bei mir spontan in 10 Minuten entstanden. Ich hatte nicht Zeit, mich mit der ASCII-Tabelle auseinanderzusetzen, um die numerischen Werte zu ermitteln. Also kopierte ich die ersten Zeichen vom Texteditor in den VB-Editor. So, für mehr muß ich mich ja wohl nicht entschuldigen. Dafür, dass es Dein erster Beitrag ist, ist er nicht sonderlich gelungen. Gruß Steffen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kai Knospe Mitglied Problemlöser
Beiträge: 27 Registriert: 27.01.2006 R18SP2 // XP SP2 auf HP xw4600<P>R16SP3 // HP-UX auf HP c8000
|
erstellt am: 27. Jan. 2006 14:20 <-- editieren / zitieren --> Unities abgeben: Nur für crinuy
Dafür, dass es Dein erster Beitrag ist, ist er nicht sonderlich gelungen... So ein Quatsch...und dann auch noch beleidigend werden...Hast einen IQ auf Höhe der Aussentemperatur??? Wichtig ist doch, zu wissen wie ein jpeg aufgebaut ist...wer keine Ahnung hat was er tut, sollte es lassen!!! Dein Beispiel ist mitnichten in 10 minuten entstanden...das ist das typische Gelaber in diesem Forum! Wer keinen Schimmer hat, programmiert tagelang irgendwas...und in der not hat es dann halt nur 5 minuten gedauert...wer gibt schon gern zu, dass er für den müll 2 Wochen gebraucht hat... Aber zurück zum sachlichen Teil: Es bietet sich an, die Datei in Basic binär zu öffnen und Byte-weise einzulesen: Dim bByte As Byte Dim bPicEnd As Boolean Open "Part1.CATPart" For Binary Access Read As #1 Open "Part1.jpg" For Binary Access Write As #2 While Not EOF(1) And Not bPicEnd Get #1,,bByte If asc(bByte) = 255 Then ' FF Get #1,,bByte If asc(bByte) = 216 Then ' D8 Get #1,,bByte If asc(bByte) = 255 Then ' FF 'Image Header found, write Header Put #2,,chr(255) Put #2,,chr(216) Put #2,,chr(255) While Not EOF(1) Get #1,,bByte If asc(bByte) = 255 Then ' FF Get #1,,bByte Put #2,,bByte If asc(bByte) = 217 Then ' D9 bPicEnd = True ' Picture End reached End IF Else Put #2,,bByte End If Loop Loop Close #1 Close #2 Allein das Tippen, so rein aus dem Gedächtnis hat 20 Minuten gedauert...
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
crinuy Mitglied Student
Beiträge: 19 Registriert: 17.02.2005
|
erstellt am: 27. Jan. 2006 14:22 <-- editieren / zitieren --> Unities abgeben:
|
myTea Mitglied Ingenieur Fahrzeugtechnik
Beiträge: 1344 Registriert: 22.07.2002 Catia V6 2014
|
erstellt am: 27. Jan. 2006 14:35 <-- editieren / zitieren --> Unities abgeben: Nur für crinuy
Hallo Kai, jetzt mal halblang. Dem Steffen nehm ich das schon ab dass er das in nur 10 Minuten gemacht hat. Von ihm kommen hier im Forum, gerade auch im Bereich Programmierung viele sehr sehr gute Tips. Ich fand das auch wieder einen sehr guten Tip deswegen 10U´s von mir. Es geht hier im Forum ja auch nicht darum anderen hier kostenlos fertige Lösungen anzubieten, sondern vorwiegend schnelle Tips geben die einem kurzfistig einfallen. Gruss, Thomas ------------------ www.ibm.com/innovation/de www.supplier-collaboration-center.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Steffen Hohmann Mitglied
Beiträge: 446 Registriert: 06.03.2002
|
erstellt am: 27. Jan. 2006 14:48 <-- editieren / zitieren --> Unities abgeben: Nur für crinuy
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|