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ć?
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
SmallImageWidth=150
SmallImageHeight=99
SmallImage=78DAED9DDB5753571EC7BF7FDA3CCED3AC350FB3E66156675E3A6BA6B6166FD58E17B450AC15545414A580A58852542E856042C8FD9E10C8FD7E39E49E4042B0DC14ACB34F6852025E21B5C1FC1E3E2B39E7E49C6CCEFEB07FBFB373F63E5ABD01BE60B8AAD0566999B474AEDEBA4CDE40186B1B2FF64C722E5791E3F054AA4CB9E575846663152B53A5CA158AC4AAEE5CE55737904CA52A7EAE52F30BA5E53F1AB5CE503565D95AA6F7552E8BDDF5DAED53335658ED1E389D2E48E4CA1DDB35BAA9C2B6DD7C8FD5E9DE75B97987B67B5529EF89BDA3339971BDFD367A7A3AA0374D63DAE628D1F5432F060607D1D2DA81D65B3FA0A3E306245205EEDC7F84AFCF7F8DF3179AF0707004CD376EA3B1F102AEB6DD42F3E566B6AD1137DADB303D6D2E1DEBE1D008BAD97ED75B5B70B5FD067AFA06D0D9719B7DA7B9EC3BDF16DE53F2AABABD6A6ABD89E6ABD720163D2EABBB4BED9D68FFAE13AD57AF33AEA0EDBB1E18B4CA5D79C07BD5D57B0FADD7AFA2ABF37661DDEDBB836CFD3079F5817AF5AABA1B1D17EEAACE5F46A5BF87BCAA6EF83A5A5859C798448F95C5EC8E6DEFAB0CBBBD8620AFAAD7AB4AD637794514EB543829C1A44286B5D595B26D8249391472317E12A9F078528A683CFDBB9441A4B1E0C74783504C39D935A71C6AB582ADFF85BCFA40F32BDD2EAFD52A997B517EF5E1C5C16A66AB4B469B1F7EAF93BC22AF2AE2D594C5C65EFD707883C82EE4C9AB2AF34AA6B743A2D220C845F79557FCEF791407AB934C2EFF5E72A84A43F915F17BE757E415415E11E415415E9157C487E75534994617BBA6EE54A9AB8A877A23E215BC0F96BC7AFFFD35375FBCA83AEEE5F330383D4865F3E4CD3EF5EAF29327B89CCFA16D63034D8914BE4924D0929BC3F928870BF3395CC8CCA329C2E1CACF8B680CCFE2E25CA6B0FE9B54068D1CC7F649A0399344F37CB6B06F532289A6780C5F85387C9B8CE15BF6D9F3C90CBECD64D0100EE31BB6EE623AB979DC580CE7E309B4AEACEC70EB8CC30189524DDEEC53AFCEF9FD38AE91E1DADA2A3E792CC7A7E3A3383563C2118908276C3ED4698DF84229C3399F07755239FE6732B0F5ECBD428B4FC7043838A94463D08D53360B8EAA75F84CA6C417C6297C3C348AE37A054E390338A4D6E394DDCE8E3D8E83C2319C30287044A5459D448613533A5C5E5C24AF3E30AFBE0A0671CAAC655EADA14E69C0118518757239F32D80CFA54A1C1029984F93ACFEED382417E3B4CB8D3AE1080E898538A655A3DE3E8DE3D3CE823BA7ED0E1C144B70582143DDA4045F4E9970DAED65C70AE228DBB7211466BEFD848312253E97C871D2E1C431D924EA2646F15FE6E8319504CDB91C79B507AF64EC9C15C79BFC915E5DCA2FA221E82979755C27C761B5BA10E3EAE4EA32AF8E6A980B160B0E4BC538303C884F4513382A93E0106BBBCE4C1BF0E5B405679943071E8FE1B04A8533B6191C37EA71C6E7C5576EE73BE558E4D5DB531CAF5474AA1ADAABC66882B5430AE6CB34CEFA9C68E2C2F8D2EA40BDC783530E2FEA59BB759AC530DEA7B3418EADB3E15C2088E66CB6CC83EBCF9EB13CE9295AE6E74AEB2EFDBC8C8BA9389A17F2859C8ABCAA9D38F89958CFDA192BEA5D369CF1BAD1329766B1CEC36256108DB331E652080D3E1FCB9FAC2C27CFE2B8C98CB3013FCBEB63BFEB352179B5BFFBAFFAD4060CB2BCA8DAE8536B118AC4C91BEA6F27C8AB77C6E4C86268D40BA982FE0FC8AB4ADEF3B68AEE1E2B02DC661FB843A804A757C3FD780401A31D3EA90211939EEA99BC7A27789F46C7FD2CD7DF1CDF24302530604F97A1B4A5A99EC9AB5D5C3F464AF7BE766AFC68F7FB31CCAEDDFA969FA1CDEDC60FD2CD6D66FE338A29E8041A848C3388B1659EC51CFDDE570B5E39BD59D43BD2F87C228CBA613B0E0B7DA8B726D1C0DA1E85C95FF2A14860CB3DD5BC57DFA7D305AFFAD7D6D11D8B96BCE2110D69201B90206C22AF6AAF9F6109F79843DDAA08BAE41C6E097CE89D62F18DC533DD4C0AA3CC338D3682B9ECF28E7DF9B87727992A78F5E0D906BA93098CDB37E3E02A4339330791D88B2847F7BB501C7CD378E070597B756F31FFAB57CFD13B3F5FD65EF5778A30DE2B8641A0A2F6EA3D7A65B6FBC171817DE3159FAFB777982157470ACB6313768CA83C8536AA88D9FBDB1C2C5C62091EFF02B808B9F43EBC72B8BDFB386F4F637179BDF03EE2F2219FCE50BD521CA47E51F28A20C82B82BC22C82B8220AF08F28A20AF0882BC22C82B82BC22887D322E95A071A90441719020AF08F28A20C82B9EDCD206429145700C7280BCAA14FEE81206479C108C79D8F20679405E558C0949B8745F3C415E556AFC3D3FDEE2E190A7F07EEBB6983788B8CB836C3C8188CD86B0D184A05A854C388CA8CD81B97088BC21AF5EFD77DB5EFE378E0A2DE81DD0E0E1C40CEE0EEAD0D3AF8456A8422E9144321062AF344F512D79B57D1C348F937F556BF194BD3E65AF2E46E0D76DF6A191D2E738AFBF7C2CBE6F732C7E119AE3616F5EEDD7E70FE6569E635C1CC2F078104F167F7B06B27D4281AC4AB6E995C98CAC77167E95B4E461F1738B4F5F40C19C2B8E99BEE9F7A277CA8E3B7DDFE3AE5C4C5EEDD2ABE2F3070D363FFB1F9FAE5AAFF8F963F8F182DBE1C7DEEFA57DF331C604A2527B75D3E7A1F6AA025E690CC67D1107AFB1B6E45062057F7FE0C05F7A2CF897D08D8FD5619C71A4A119D362E2BE148FEF4FC22850167C510D8D2178A505CFFA07B0DE7209D6BB03B008C777C441FB8C0377FBEE97BC6A73B9D1CFC5706FCA8807F11879F581E757266F1613AC8EB763F42D40678A43AB8B42A699C594997F5EED2F08CF78B060356FC6417E2E86E43CE21EE78EF6CAC9BCEA1F78C4BCB217BCBAEE72E2C75806F7744AFC180A9057743DF84E7170EBB2C5E12AE5577717B214076BD82BBEDF5C674AC0E1992B5BAF7F49BB66E3F2AFF5AA08EFD556A7C8ABDAF32A995DC3B828087F2857E6D4BF7531FCA9418E3FB7A8F0D184170758FE75481BC184D002E98014863155597EB57D6EB6AB4E3B7955C35E6D9FA7A8E8D5B1D813FCEDA1131F8D7B70F2E7159C636E9CF467D1DDA5427FDB4F7049F5AFF5EA4E2A495ED59857FC3C685B736EBDC45ABE7D791DC3CC037ECEBFAD48986F627D0A43430E4423B9D7CE25D9110E935735E615EFC1D2F23364136964A3D1820B4B4F5FC02594C1392E2A5C07EEE5F87C7ED593C9905735E615FFDB4C36B900A7448A9060044F24323C7173F0CB2558CCA45EBBEF50AF7CC73C903CDE6DED55714E65F2AA36BCE2FBA0D6EBCF62AEBE01D11913D6F898C8F2A4651F8784CB89D5D5D557EECBCF5BFBA047819ECB23D00DCB5FEB554738445ED5527BC53C72F50F145C2A3AA1D8F2FE4D485E32CFF6CBBC2ACED54D5E51BF6891446E159D2C476A10F8717E2250F8ED87A78F31C9F2F637CDB3CDE7571D1CE5ED342EB59C192E8F4F7431FCB5D7827F0A37FBAE788E69221009CC903F90BEF1D902FCFCDCE4158D4BDDDED7CEF75FFD43E4C77F8CB385BEAB62FFD5F7DD4A08BA8488596D655E6DBFFFAA87E220C5C157B8B5FD771C2B6BC76C6CBDD114C7DAFAF357EEDBCFDAB56ED6BE6D454B5E91577B80BF66F42954E40579459057047945E78620AF08F28A20AF0882BC22AAD42B9B2780682C4E5E1115F12AC045E1F56F3E2735BFB44A5E1115F1AAE812C54182F22B82BC22C82BF28A20AF08F28A20AFE8DC10E415415E11B5EA556A7EA1B4FC47531CD7514DF065AAD672554B597887B67BB557F8F94A2BEDFD5EC92DAF23341BAB58992A55AE50245675E72ABFBA81642A55B13215C77A5513D55A263A576F5FA6FF033141FB95
