Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Для чего нужен поток Picture->Gallery в Ert? (число прочтений - 11457 )
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Для чего нужен поток Picture->Gallery в Ert?
Ответ #15 - 11. Сентября 2008 :: 12:25
Печать  
Цитата:
Попробовал, размер ert не изменился ни на байт.
Так и должно быть?

Ты смотрел на старую ert, или имяобработки_упакованная.ert?
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Для чего нужен поток Picture->Gallery в Ert?
Ответ #16 - 11. Сентября 2008 :: 12:31
Печать  
Arta писал(а) 11. Сентября 2008 :: 12:25:
Цитата:
Попробовал, размер ert не изменился ни на байт.
Так и должно быть?

Ты смотрел на старую ert, или имяобработки_упакованная.ert?


А с чем бы я тогда сравнивал? Конечно,  имяобработки_упакованная.ert
  
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Для чего нужен поток Picture->Gallery в Ert?
Ответ #17 - 11. Сентября 2008 :: 12:31
Печать  
Перекачай приаттаченый файл и попробуй еще раз. Размер Gallery-то скорее всего изменился, можешь в потоках посмотреть, а размер Ert не изменился, потому что compound.dll почему-то не переупаковывает файл при изменении потока. Пришлось теперь Ert сначала разобрать на потоки во временный каталог (как это делает GComp), а потом с нуля сформировать новый Ert из папки распаковки. В этом случае размер Ert уменьшается иногда даже в том случае, когда вроде бы и уменьшаться-то нечему. Вот сделаю еще генерацию Meta - вообще зашибись будет.
  
Наверх
 
IP записан
 
U_zer
Экс-Участник


Re: Для чего нужен поток Picture->Gallery в Ert?
Ответ #18 - 11. Сентября 2008 :: 12:36
Печать  
Теперь заработало! Спасибо.
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Для чего нужен поток Picture->Gallery в Ert?
Ответ #19 - 11. Сентября 2008 :: 18:11
Печать  
maljaev писал(а) 11. Сентября 2008 :: 09:38:
Разобрался в структуре Gallery.

49 4C 01 01 [01] 00 0A 00 08 00 50 00 50 00 FF FF FF FF 10 00 FF FF FF FF FF FF FF FF
01 00 00 FF [01] 00 00 00
[01] 00 00 0F 02 7B 7D

Круто.
Есть надежда, что максимальный размер галереи кодируется все же двумя байтами.
Ну, когда найдутся владельцы толстых галерей - они и проверят. Улыбка
  

De quelle planète es-tu?
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Для чего нужен поток Picture->Gallery в Ert?
Ответ #20 - 15. Сентября 2008 :: 19:57
Печать  
Приделал к обработке упаковку потока "Main MetaData Stream" путем анализа диалоговых форм и исключения из "Main MetaData Stream" неиспользуемых в реквизитах формы объектов метаданных. Помучался... Теперь можно сжимать любые ERT, и с картинками и без. До кучи приделал пакетную обработку файлов из каталога. Ну, а сжатие "Gallery" последним методом работает как часы - правда обработок с более чем 256 реально используемыми в реквизитах картинками я не встречал, поэтому ни опровергнуть ни оправдать надежды kms не могу.

16.09.08 14:20 интерфейс переделал.
« Последняя редакция: 16. Сентября 2008 :: 11:02 - maljaev »  

pack_ert_002.zip ( 62 KB | Загрузки )
Наверх
 
IP записан
 
alexqc
Junior Member
**
Отсутствует



Сообщений: 77
Местоположение: АР Крым, Симферополь
Зарегистрирован: 21. Июня 2006
Пол: Мужской
Re: Для чего нужен поток Picture->Gallery в Ert?
Ответ #21 - 17. Сентября 2008 :: 07:17
Печать  
Я когда-то в галереях копался, и сделал пару выводов:
1. Галерея используется в качестве "предпросмотра" добавляемых в форму картинок (это думаю знают все или почти все.). У меня есть даже практическое подтверждение: картинка для чекбокса в ТЗ, изначально содержала 2 состояния(вкл-выкл), потом я "вручную" (в распакованном гкомпом исходнике) добавил 3-е("серое"). В галерее естественно, осталось старая картинка. И именно она показывается в диалоге выбора картинок!

2. Есть предположение, что галерея используется для "сравнения" картинок. Поскольку когда вставляем внешний отчет обратно в конфу, имеющиеся в нем картинки не дублируются. Я предполагаю, что картинки "сравниваются" по иконкам в галерее. Но это только предположение, как-нибудь проверю.

maljaev писал(а) 15. Сентября 2008 :: 19:57:
Ну, а сжатие "Gallery" последним методом работает как часы - правда обработок с более чем 256 реально используемыми в реквизитах картинками я не встречал, поэтому ни опровергнуть ни оправдать надежды kms не могу.

Дык эта, нагенери и посмотри Улыбка.
  

Везде - от моря Черного до снежной Колымы - мы трудностям показываем кукиш.
Наверх
 
IP записан
 
alexqc
Junior Member
**
Отсутствует



Сообщений: 77
Местоположение: АР Крым, Симферополь
Зарегистрирован: 21. Июня 2006
Пол: Мужской
Re: Для чего нужен поток Picture->Gallery в Ert?
Ответ #22 - 17. Сентября 2008 :: 07:53
Печать  
Итак, проверил Улыбка.
В файле 2 МД шника и 2 отчета. В 1-м МДшнике две картинки, во 2-м - две другие. 1-й отчет сделан в МД1, имеет 2 кнопка с картинками. 2-й переделан из 1-го заменой картинок из МД2 (галерея осталось от МД1).
При открытии Отчета2 в обеих МДшниках:
1. Картинки на кнопках остаются такие как в отчете.
2. При открытии свойств кнопок, на закладке картинки предпросмотр (в свойствах! не в выборе!) такой, как в галерее отчета.
3. При открытии выбора картинок открывается галерея текущего МДшника (для пустого МДшника - галерея вообще пустая).

И наконец, при добавлении отчета: в МД1 и пустую конфу - добавляются картинки отчета, в МД2 - картинки не изменяются (не дублируются).

Итак, выводы:
1. Галерея используется _только_ для предпросмотра;
2. Выбор делается из галереи конфы.
3. При вставки отчета в конфу анализируются сами картинки отчета, галерея значения не имеет.
  

test_009.zip ( 17 KB | Загрузки )

Везде - от моря Черного до снежной Колымы - мы трудностям показываем кукиш.
Наверх
 
IP записан
 
MadDAD
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 22
Зарегистрирован: 17. Ноября 2015
Re: Для чего нужен поток Picture->Gallery в Ert?
Ответ #23 - 06. Декабря 2017 :: 06:50
Печать  
Недавно случилась проблема, на одной машине сохраняем обработку с картинками, на другой она не открывается с ошибкой "Неподдерживаемый формат файла".

Опытным путем выяснил, что проблема в галерее картинок, ну и начал копать. Откопал что галерея - это сериализованный ImageList (о чем говорит заголовок файла "IL") из ComCtl32.dll с дописанной в конце таблицей сопоставлений с картинками и идентификаторами. Все иконки в нем 80х80. С форматом таблицы сопоставлений разобрался. Сам объект читается и пишется при помощи ImageList_Open()  и ImageList_Write() соответственно.
Формат таблицы сопоставления:
DWORD - Заголовок - {0x01,0x00,0x00,0xff}
DWORD - Количество иконок
DWORD* - массив числовых идентификаторов иконок, в формате  {i,0x00,XX} где XX - WORD - какой-то префикс. Соответствует имени файла _picture.[i]00[XX].bmp
WORD - Префикс XX
?? - Строка с идентификаторами в стандартном формате 1С, с предшествующей длиной. в формате "{{"ИДКартинки в 10х формате","Строка идентификатор из галереи"},{..},{..}..{..}}"
ImageList пишется в формате:
[Заголовок ImageList] = Gallery.head,
[Большой битмап с иконками] = Gallery.bmp,
[Таблица сопоставлений] = Gallery.tail

В соответствии с этим накидал тулзу на C# которая умеет разбирать галерею на картинки, собирать новую галерею из больших изображений, разобранной Gcomp'ом конфигурации в формате совместимом с GComp (head, tail и bmp ) и для прямой вставки в Compound (Gallery) при помощи FAR + DocFileBrowser, и собирать галерею из Gallery.bmp - но без таблицы сопоставлений, т.к. их взять в таком случае не откуда.

Сюда файлы не вставляются, поэтому так - https://cloud.mail.ru/public/FsEE/1DUbvVLqi
  
Наверх
 
IP записан
 
MadDAD
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 22
Зарегистрирован: 17. Ноября 2015
Re: Для чего нужен поток Picture->Gallery в Ert?
Ответ #24 - 06. Декабря 2017 :: 07:28
Печать  
P.S. Причину битья галереи так и не нашел. Но видимо напишу тулзу, которая будет её просто выкидывать или заменять на правильную
  
Наверх
 
IP записан
 
MadDAD
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 22
Зарегистрирован: 17. Ноября 2015
Re: Для чего нужен поток Picture->Gallery в Ert?
Ответ #25 - 06. Декабря 2017 :: 11:33
Печать  
Причина битья галереи была в манифесте, который лежал в папке Bin платформы. Из-за этого использовалась более новая версия ComCtl32.dll и формат сохранения ImageList у неё немного отличается- изменен заголовок и в конце лишних 44 байта. И сам битмап собран из иконок в одну колонку.

По итогам дополнил утилу

Добавил ключ -r.
Конвертировать без промежуточной разборки - сборки галереи.
https://cloud.mail.ru/public/J4ju/s1DhjEbXa

Пользоваться так:
Для исправления ошибки с версией берем FAR и плагин DocFileBrowser. Вытаскиваем поток Gallery.

Запускаем утилу: GalleryTool -r Gallery Gallery.bak должна написать что нашла сколько-то картинок и записала в в Gallery новую галерею.
Складываем Gallery обратно в обработку.

Для компиляции галереи из распакованного GComp исходника:
GalleryTool -c "[путь]\PictureGallery" Gallery
Должна написать, что собрала Gallery из 100500 картинок. Она сами их отресайзит в размер 80х80 и положит на белый фон. Сделает Gallery.head, Gallery.bmp и Gallery.tail. А так же поток Gallery целиком. Дальше можно собрать GComp или положить новый Gallery обратно в собранный MD как  в первом варианте.

Для разборки на отдельные иконки:
Вытаскиваем поток Gallery. Запускаем утилу -
GalleryTool -d Gallery "[Каталог]"
Разберет все на иконки 80x80 и сложит в каталог [Каталог].

Так же можно собрать поток Gallery из Gallery.bmp ( ключ -f), но привязки к реальным картинкам не будет, т.к. неоткуда её взять.

Думаю будет полезно тем, кто разбирает/собирает конфу при помощи GComp и меняет картинки.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать