logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Altium Designer - Format plików *.SchDocPreview, *.PcbDocPreview

pkorpas 05 Paź 2015 02:18 2841 2
  • #1 15043305
    pkorpas
    Specjalista od radiokomunikacji
    Postanowiłem napisać skrypt indeksujący zgromadzone (w wybranym folderze na dysku) projekty PCB zrobione w Altium Designerze. Działa to w ten sposób, że przeszukiwane są podfoldery w poszukiwaniu plików *.PrjPcb, *.SchDoc oraz *.PcbDoc, a następnie są one grupowane w projekty (na podstawie lokalizacji w strukturze folderów) i dalej z tego generowany jest plik HTML z przeglądem (wraz z linkami) kluczowych plików ze wszystkich projektów. Do tego wszystkiego brakuje mi graficznych podglądów PCB. Mogę sobie poradzić robiąc ręcznie zrzuty ekranu do każdego z projektów, ale... takowe dane wydają się być na wyciągnięcie ręki.

    Otóż Altium generuje pliki z rozszerzeniami *.SchDocPreview oraz *.PcbDocPreview, które (tak się domyślam) muszą zawierać bitmapę o niskiej rozdzielczości z podglądem dokumentu. Zdaje się, że jest to wykorzystywane np. podczas najeżdżania myszką na "Sheet symbole" w schematach hierarchicznych.

    Pytanie brzmi: jak dobrać się do tej bitmapy?

    Co mamy? Na końcu posta wkleiłem przykładową sekcję. Widzimy wymiary obrazu w pikselach (150x99) oraz jego całkowity rozmiar w bajtach (150x99x4=59400) (razy 4, bo kolor 32-bitowy). Dalej następuje ciąg bajtów zapisanych w formie szesnastkowej, który wydaje się opisywać treść tej bitmapy. Danych jest jednak dużo mniej niż 59.4 kB - zastosowana została więc kompresja. Napisałem skrypt konwertujący te dane do pliku binarnego (w załączeniu), ale np. program IrfanView nie rozpoznaje tego formatu grafiki. Możliwe, że jest to bitmapa potraktowana jakimś Huffmanem albo RLE... Ktoś ma może pomysł, jak to ugryźć? Temat nie jest gardłowy, ale może ktoś z Kolegów ma pomysł, jak to zdekodować?

    Spoiler:
    SmallImageOriginalSize=59400
    SmallImageWidth=150
    SmallImageHeight=99
    SmallImage=78DAED9DDB5753571EC7BF7FDA3CCED3AC350FB3E66156675E3A6BA6B6166FD58E17B450AC15545414A580A58852542E856042C8FD9E10C8FD7E39E49E4042B0DC14ACB34F6852025E21B5C1FC1E3E2B39E7E49C6CCEFEB07FBFB373F63E5ABD01BE60B8AAD0566999B474AEDEBA4CDE40186B1B2FF64C722E5791E3F054AA4CB9E575846663152B53A5CA158AC4AAEE5CE55737904CA52A7EAE52F30BA5E53F1AB5CE503565D95AA6F7552E8BDDF5DAED53335658ED1E389D2E48E4CA1DDB35BAA9C2B6DD7C8FD5E9DE75B97987B67B5529EF89BDA3339971BDFD367A7A3AA0374D63DAE628D1F5432F060607D1D2DA81D65B3FA0A3E306245205EEDC7F84AFCF7F8DF3179AF0707004CD376EA3B1F102AEB6DD42F3E566B6AD1137DADB303D6D2E1DEBE1D008BAD97ED75B5B70B5FD067AFA06D0D9719B7DA7B9EC3BDF16DE53F2AABABD6A6ABD89E6ABD720163D2EABBB4BED9D68FFAE13AD57AF33AEA0EDBB1E18B4CA5D79C07BD5D57B0FADD7AFA2ABF37661DDEDBB836CFD3079F5817AF5AABA1B1D17EEAACE5F46A5BF87BCAA6EF83A5A5859C798448F95C5EC8E6DEFAB0CBBBD8620AFAAD7AB4AD637794514EB543829C1A44286B5D595B26D8249391472317E12A9F078528A683CFDBB9441A4B1E0C74783504C39D935A71C6AB582ADFF85BCFA40F32BDD2EAFD52A997B517EF5E1C5C16A66AB4B469B1F7EAF93BC22AF2AE2D594C5C65EFD707883C82EE4C9AB2AF34AA6B743A2D220C845F79557FCEF791407AB934C2EFF5E72A84A43F915F17BE757E415415E11E415415E9157C487E75534994617BBA6EE54A9AB8A877A23E215BC0F96BC7AFFFD35375FBCA83AEEE5F330383D4865F3E4CD3EF5EAF29327B89CCFA16D63034D8914BE4924D0929BC3F928870BF3395CC8CCA329C2E1CACF8B680CCFE2E25CA6B0FE9B54068D1CC7F649A0399344F37CB6B06F532289A6780C5F85387C9B8CE15BF6D9F3C90CBECD64D0100EE31BB6EE623AB979DC580CE7E309B4AEACEC70EB8CC30189524DDEEC53AFCEF9FD38AE91E1DADA2A3E792CC7A7E3A3383563C2118908276C3ED4698DF84229C3399F07755239FE6732B0F5ECBD428B4FC7043838A94463D08D53360B8EAA75F84CA6C417C6297C3C348AE37A054E390338A4D6E394DDCE8E3D8E83C2319C30287044A5459D448613533A5C5E5C24AF3E30AFBE0A0671CAAC655EADA14E69C0118518757239F32D80CFA54A1C1029984F93ACFEED382417E3B4CB8D3AE1080E898538A655A3DE3E8DE3D3CE823BA7ED0E1C144B70582143DDA4045F4E9970DAED65C70AE228DBB7211466BEFD848312253E97C871D2E1C431D924EA2646F15FE6E8319504CDB91C79B507AF64EC9C15C79BFC915E5DCA2FA221E82979755C27C761B5BA10E3EAE4EA32AF8E6A980B160B0E4BC538303C884F4513382A93E0106BBBCE4C1BF0E5B405679943071E8FE1B04A8533B6191C37EA71C6E7C5576EE73BE558E4D5DB531CAF5474AA1ADAABC66882B5430AE6CB34CEFA9C68E2C2F8D2EA40BDC783530E2FEA59BB759AC530DEA7B3418EADB3E15C2088E66CB6CC83EBCF9EB13CE9295AE6E74AEB2EFDBC8C8BA9389A17F2859C8ABCAA9D38F89958CFDA192BEA5D369CF1BAD1329766B1CEC36256108DB331E652080D3E1FCB9FAC2C27CFE2B8C98CB3013FCBEB63BFEB352179B5BFFBAFFAD4060CB2BCA8DAE8536B118AC4C91BEA6F27C8AB77C6E4C86268D40BA982FE0FC8AB4ADEF3B68AEE1E2B02DC661FB843A804A757C3FD780401A31D3EA90211939EEA99BC7A27789F46C7FD2CD7DF1CDF24302530604F97A1B4A5A99EC9AB5D5C3F464AF7BE766AFC68F7FB31CCAEDDFA969FA1CDEDC60FD2CD6D66FE338A29E8041A848C3388B1659EC51CFDDE570B5E39BD59D43BD2F87C228CBA613B0E0B7DA8B726D1C0DA1E85C95FF2A14860CB3DD5BC57DFA7D305AFFAD7D6D11D8B96BCE2110D69201B90206C22AF6AAF9F6109F79843DDAA08BAE41C6E097CE89D62F18DC533DD4C0AA3CC338D3682B9ECF28E7DF9B87727992A78F5E0D906BA93098CDB37E3E02A4339330791D88B2847F7BB501C7CD378E070597B756F31FFAB57CFD13B3F5FD65EF5778A30DE2B8641A0A2F6EA3D7A65B6FBC171817DE3159FAFB777982157470ACB6313768CA83C8536AA88D9FBDB1C2C5C62091EFF02B808B9F43EBC72B8BDFB386F4F637179BDF03EE2F2219FCE50BD521CA47E51F28A20C82B82BC22C82B8220AF08F28A20AF0882BC22C82B82BC22887D322E95A071A90441719020AF08F28A20C82B9EDCD206429145700C7280BCAA14FEE81206479C108C79D8F20679405E558C0949B8745F3C415E556AFC3D3FDEE2E190A7F07EEBB6983788B8CB836C3C8188CD86B0D184A05A854C388CA8CD81B97088BC21AF5EFD77DB5EFE378E0A2DE81DD0E0E1C40CEE0EEAD0D3AF8456A8422E9144321062AF344F512D79B57D1C348F937F556BF194BD3E65AF2E46E0D76DF6A191D2E738AFBF7C2CBE6F732C7E119AE3616F5EEDD7E70FE6569E635C1CC2F078104F167F7B06B27D4281AC4AB6E995C98CAC77167E95B4E461F1738B4F5F40C19C2B8E99BEE9F7A277CA8E3B7DDFE3AE5C4C5EEDD2ABE2F3070D363FFB1F9FAE5AAFF8F963F8F182DBE1C7DEEFA57DF331C604A2527B75D3E7A1F6AA025E690CC67D1107AFB1B6E45062057F7FE0C05F7A2CF897D08D8FD5619C71A4A119D362E2BE148FEF4FC22850167C510D8D2178A505CFFA07B0DE7209D6BB03B008C777C441FB8C0377FBEE97BC6A73B9D1CFC5706FCA8807F11879F581E757266F1613AC8EB763F42D40678A43AB8B42A699C594997F5EED2F08CF78B060356FC6417E2E86E43CE21EE78EF6CAC9BCEA1F78C4BCB217BCBAEE72E2C75806F7744AFC180A9057743DF84E7170EBB2C5E12AE5577717B214076BD82BBEDF5C674AC0E1992B5BAF7F49BB66E3F2AFF5AA08EFD556A7C8ABDAF32A995DC3B828087F2857E6D4BF7531FCA9418E3FB7A8F0D184170758FE75481BC184D002E98014863155597EB57D6EB6AB4E3B7955C35E6D9FA7A8E8D5B1D813FCEDA1131F8D7B70F2E7159C636E9CF467D1DDA5427FDB4F7049F5AFF5EA4E2A495ED59857FC3C685B736EBDC45ABE7D791DC3CC037ECEBFAD48986F627D0A43430E4423B9D7CE25D9110E935735E615EFC1D2F23364136964A3D1820B4B4F5FC02594C1392E2A5C07EEE5F87C7ED593C9905735E615FFDB4C36B900A7448A9060044F24323C7173F0CB2558CCA45EBBEF50AF7CC73C903CDE6DED55714E65F2AA36BCE2FBA0D6EBCF62AEBE01D11913D6F898C8F2A4651F8784CB89D5D5D557EECBCF5BFBA047819ECB23D00DCB5FEB554738445ED5527BC53C72F50F145C2A3AA1D8F2FE4D485E32CFF6CBBC2ACED54D5E51BF6891446E159D2C476A10F8717E2250F8ED87A78F31C9F2F637CDB3CDE7571D1CE5ED342EB59C192E8F4F7431FCB5D7827F0A37FBAE788E69221009CC903F90BEF1D902FCFCDCE4158D4BDDDED7CEF75FFD43E4C77F8CB385BEAB62FFD5F7DD4A08BA8488596D655E6DBFFFAA87E220C5C157B8B5FD771C2B6BC76C6CBDD114C7DAFAF357EEDBCFDAB56ED6BE6D454B5E91577B80BF66F42954E40579459057047945E78620AF08F28A20AF0882BC22AAD42B9B2780682C4E5E1115F12AC045E1F56F3E2735BFB44A5E1115F1AAE812C54182F22B82BC22C82BF28A20AF08F28A20AFE8DC10E415415E11B5EA556A7EA1B4FC47531CD7514DF065AAD672554B597887B67BB557F8F94A2BEDFD5EC92DAF23341BAB58992A55AE50245675E72ABFBA81642A55B13215C77A5513D55A263A576F5FA6FF033141FB95
  • Pomocny post
    #2 15044085
    TWl
    Poziom 21  
    pkorpas napisał:

    Pytanie brzmi: jak dobrać się do tej bitmapy?


    78 DA na początku sugeruje kompresję inflate. Po rozpakowaniu wychodzi 32-bitowa bitmapa.

    Kod: Python
    Zaloguj się, aby zobaczyć kod


    TWl
  • #3 15045605
    pkorpas
    Specjalista od radiokomunikacji
    Dziękuję - działa! W php dekompresję załatwia funkcja gzuncompress().
REKLAMA