Доброго времени суток. Ищу способ получить реальный размер картинки в пикселях средствами 1С. Нашел вот такое видео https://www.youtube.com/watch?v=I1si3x6uohg Но не могу найти исходники от этого видео, а на видео ничего не видно. Может у кого то есть эти исходники или кто то все таки смог средствами 1С решить данную задачу без жутких костылей
собственно
вот.
скрин как выглядит файл картинки в 16тиричном виде.
И код - выдранный с вашего видео.
Все просто и понятно.
Интересно зачем ? Ведь количество пикселей само по себе может быть разным на дюйм. Если оценивать высоту в каком то макете, то нужно картинки стандартизировать, делать эталон - например 100 пикселей, и на форме смотреть сколько пикселей в миллиметр умещается.
(4)
Нет в исходниках других примеров, я их нашел - в описании к плейлисту ссылки на облако.
А чтобы не изучать другие форматы автор видео использует прекрасный метод картинки Преобразовать() - он любую картинку преобразует в PNG, а свойства этого формата всегда одинаковые.
Кстати, в новых версиях платформы у картинки появились новые методы - Высота() и Глубина(). Так что теперь можно вообще с заголовком не заморачиваться (если режим совместимости конфигурации позволяет)
там на видео ищется в двоичных данных определенная последовательность байт, и вытаскивается.
Все же понятно по видео. И исходников никаких не надо, там же ключевой код видно
Пропускается первые 16 байт,
и начиная с 17 байта - 8 байт - это размер картинки.
Не факт что в форматах с другим расширением точно такое же устройство.
(2) Так в том то и дело, я подозреваю, что в исходниках есть примеры для большинства форматов, а самому изучать эти форматы как то довольно не быстро, всегда проще использовать и разбираться с готовым исходником. Так то и ракету самому можно построить...
(4)
Нет в исходниках других примеров, я их нашел - в описании к плейлисту ссылки на облако.
А чтобы не изучать другие форматы автор видео использует прекрасный метод картинки Преобразовать() - он любую картинку преобразует в PNG, а свойства этого формата всегда одинаковые.
Кстати, в новых версиях платформы у картинки появились новые методы - Высота() и Глубина(). Так что теперь можно вообще с заголовком не заморачиваться (если режим совместимости конфигурации позволяет)
(5) Кстати на момент написания вопроса в комментах к видео не было кода, вот я и подумал, что там еще выше что то есть, а оказалось что весь код таки уместился на видео. Еще раз спасибо что ткнули носом!
собственно
вот.
скрин как выглядит файл картинки в 16тиричном виде.
И код - выдранный с вашего видео.
Все просто и понятно.
Интересно зачем ? Ведь количество пикселей само по себе может быть разным на дюйм. Если оценивать высоту в каком то макете, то нужно картинки стандартизировать, делать эталон - например 100 пикселей, и на форме смотреть сколько пикселей в миллиметр умещается.
(3) Да спасибо, думал, что на видео есть еще какой-то важный код выше того который виден, сразу не допер. А размер в пикселях нужен к примеру если есть ограничение на размер картинки при загрузке в базу, нужно к примеру проверить, что бы логотип был не больше какого то определенного размера.
К сожалению, предложенные варианты не годятся для версии 8.2 (по крайней мере, в режиме совместимости с 8.1)
Поэтому для этих версий можно использовать такой вариант:
Перем Цифры,СЦифры;
Функция Hex2Dec(Стр1,Base=16) // функция для преобразования из шестнадцатеричного формата
Рез=0;
Стр=СтрЗаменить(Стр1," ",""); // сначала нужно убрать разделительные пробелы
КК=СтрДлина(Стр);
Для К=1 по КК Цикл
Рез=Рез*Base+СЦифры[Сред(Стр,К,1)];
КонецЦикла;
Возврат Рез;
КонецФункции
Процедура ПоказатьРазмер(Картинка) // Картинка, для которой нужно получить размер
Если ЗначениеЗаполнено(Картинка) Тогда
Картинка2=Картинка.Преобразовать(ФорматКартинки.PNG);
ДанныеКартинки=""+Картинка2.ПолучитьДвоичныеДанные(); // преобразуем двоичные данные картинки в текстовую строку
Ширина=Hex2Dec(Сред(ДанныеКартинки,49,11)); // в такой строке ширина будет начинаться с 49 символа,
Высота=Hex2Dec(Сред(ДанныеКартинки,61,11)); // а высота – с 61
Сообщить("Размер картинки: "+Формат(Ширина,"ЧГ=0")+"х"+Формат(Высота,"ЧГ=0"));
Иначе
Сообщить("Пустая картинка!");
КонецЕсли;
КонецПроцедуры
// Необходимы для преобразования из шестнадцатеричного формата
Цифры="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
СЦифры=Новый Соответствие;
Для К=1 по СтрДлина(Цифры) Цикл СЦифры[Сред(Цифры,К,1)]=К-1 КонецЦикла;