Получить реальный размер картинки в пикселях средствами 1С

1. frkbvfnjh 787 27.11.18 16:27 Сейчас в теме
Доброго времени суток. Ищу способ получить реальный размер картинки в пикселях средствами 1С. Нашел вот такое видео https://www.youtube.com/watch?v=I1si3x6uohg
Но не могу найти исходники от этого видео, а на видео ничего не видно. Может у кого то есть эти исходники или кто то все таки смог средствами 1С решить данную задачу без жутких костылей
По теме из базы знаний
Найденные решения
3. Boneman 298 27.11.18 17:22 Сейчас в теме
собственно
вот.
скрин как выглядит файл картинки в 16тиричном виде.
И код - выдранный с вашего видео.

Все просто и понятно.
Интересно зачем ? Ведь количество пикселей само по себе может быть разным на дюйм. Если оценивать высоту в каком то макете, то нужно картинки стандартизировать, делать эталон - например 100 пикселей, и на форме смотреть сколько пикселей в миллиметр умещается.
Прикрепленные файлы:
5. sskripatch 06.03.19 15:20 Сейчас в теме
(4)
Нет в исходниках других примеров, я их нашел - в описании к плейлисту ссылки на облако.

А чтобы не изучать другие форматы автор видео использует прекрасный метод картинки Преобразовать() - он любую картинку преобразует в PNG, а свойства этого формата всегда одинаковые.

Кстати, в новых версиях платформы у картинки появились новые методы - Высота() и Глубина(). Так что теперь можно вообще с заголовком не заморачиваться (если режим совместимости конфигурации позволяет)
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Boneman 298 27.11.18 17:15 Сейчас в теме
там на видео ищется в двоичных данных определенная последовательность байт, и вытаскивается.
Все же понятно по видео. И исходников никаких не надо, там же ключевой код видно
Пропускается первые 16 байт,
и начиная с 17 байта - 8 байт - это размер картинки.

Не факт что в форматах с другим расширением точно такое же устройство.
4. frkbvfnjh 787 28.11.18 05:13 Сейчас в теме
(2) Так в том то и дело, я подозреваю, что в исходниках есть примеры для большинства форматов, а самому изучать эти форматы как то довольно не быстро, всегда проще использовать и разбираться с готовым исходником. Так то и ракету самому можно построить...
5. sskripatch 06.03.19 15:20 Сейчас в теме
(4)
Нет в исходниках других примеров, я их нашел - в описании к плейлисту ссылки на облако.

А чтобы не изучать другие форматы автор видео использует прекрасный метод картинки Преобразовать() - он любую картинку преобразует в PNG, а свойства этого формата всегда одинаковые.

Кстати, в новых версиях платформы у картинки появились новые методы - Высота() и Глубина(). Так что теперь можно вообще с заголовком не заморачиваться (если режим совместимости конфигурации позволяет)
6. frkbvfnjh 787 06.03.19 15:36 Сейчас в теме
(5) Оооооо, спасибо! Теперь много стало понятно и про новые методы не знал, теперь буду рыть дальше...
7. frkbvfnjh 787 06.03.19 15:41 Сейчас в теме
(5) Кстати на момент написания вопроса в комментах к видео не было кода, вот я и подумал, что там еще выше что то есть, а оказалось что весь код таки уместился на видео. Еще раз спасибо что ткнули носом!
3. Boneman 298 27.11.18 17:22 Сейчас в теме
собственно
вот.
скрин как выглядит файл картинки в 16тиричном виде.
И код - выдранный с вашего видео.

Все просто и понятно.
Интересно зачем ? Ведь количество пикселей само по себе может быть разным на дюйм. Если оценивать высоту в каком то макете, то нужно картинки стандартизировать, делать эталон - например 100 пикселей, и на форме смотреть сколько пикселей в миллиметр умещается.
Прикрепленные файлы:
8. frkbvfnjh 787 06.03.19 15:44 Сейчас в теме
(3) Да спасибо, думал, что на видео есть еще какой-то важный код выше того который виден, сразу не допер. А размер в пикселях нужен к примеру если есть ограничение на размер картинки при загрузке в базу, нужно к примеру проверить, что бы логотип был не больше какого то определенного размера.
9. VladimirB 16 23.03.19 08:56 Сейчас в теме
(1)
Процедура ОпределитьРазмерКартинки(Кнопка)
	
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	Диалог.Заголовок = "Выберите файл с картинкой";
	Диалог.ПолноеИмяФайла = "";
	Диалог.ПредварительныйПросмотр = Истина;
	Диалог.Фильтр = 
	"Все картинки (*.bmp;*.dib;*.rle;*.jpg;*.jpeg;*.tif;*.gif;*.png;*.ico;*.wmf;*.emf)|*.bmp;*.dib;*.rle;*.jpg;*.jpeg;*.tif;*.gif;*.png;*.ico;*.wmf;*.emf|" ; // картинки	
	
	Если Диалог.Выбрать() Тогда
		Каталог=Диалог.Каталог;
		Имя=Сред(Диалог.ПолноеИмяФайла,стрДлина(Каталог)+1);

  		
		objShellApp=Новый COMОбъект("Shell.Application");
		objFolder=objShellApp.NameSpace(СокрЛП(Каталог));
		objItem=objFolder.ParseName(СокрЛП(Имя)); 
		размеры=objFolder.GetDetailsOf(objItem,31);
						//Для иии=0 по 200 Цикл
						//	Сообщить(""+иии+" - "+objFolder.GetDetailsOf(objItem,иии));
						//КонецЦикла;
		Размеры=СтрЗаменить(размеры,"?","");
		Сообщить("Размеры картинки - "+Размеры);
    КонецЕсли;
КонецПроцедуры
Показать
Garik8866; independ; +2 Ответить
10. frkbvfnjh 787 23.03.19 11:54 Сейчас в теме
(9) Спасибо! Интересный вариант.
11. VladimirB 16 23.03.19 16:56 Сейчас в теме
(10) Да, но не средствами 1С.
12. VladimirB 16 23.03.19 16:59 Сейчас в теме
(10)
Там еще, если разремарить, можно и другие свойства увидеть.
13. Hedron 17.09.22 16:24 Сейчас в теме
К сожалению, предложенные варианты не годятся для версии 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 КонецЦикла;
Показать
14. frkbvfnjh 787 19.09.22 05:09 Сейчас в теме
(13) Спасибо! Положим в копилку :)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот