Определение размера картинок

16. Criativve 14.06.15 22:08 Сейчас в теме
Воспользовался методом, продложенном в 7 с одним только отличием.

размеры=objFolder.GetDetailsOf(objItem,31);

Почему-то размеры находились под другим параметром
yam; lishniy; maljaev; +3 Ответить
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
17. GSoft 2235 22.10.08 18:17 Сейчас в теме
Как определить размер загружаемой картинки
поиск результата не дал - видимо плохо искал))))
18. CheBurator 3119 22.10.08 19:00 Сейчас в теме
1. зайти на профиль Душелова и посмотреть его Фотовьювер
2. ВК
3. прочитать картинку ка поток и вытащить значения
19. GSoft 2235 22.10.08 19:30 Сейчас в теме
1. Насколько я помню это Maljaev'a а не Душелова
2. В принципе не настолько это надо чтобы внешнюю компоненту привязывать
3. Сама картинка лежит в файлах, а не в базе

суть в том что есть маленькая картинка на форме и есть большая картинка на обработке в которую по даблклику передается исходная картинка. Хотелось подгонять масштабы формы под оригинальный размер картинки или картинку под разрешение при условии того что она имеет больший размер.





20. PeRom 51 22.10.08 20:09 Сейчас в теме
ФС не юзал? ИМХО через неё можно до размера добраться.
21. Mucmepukc 86 23.10.08 08:31 Сейчас в теме
22. GSoft 2235 23.10.08 10:53 Сейчас в теме
это чтото уже более близкое к правде) спасибо
правда еще бы скрипты знать)))
23. Mucmepukc 86 23.10.08 11:37 Сейчас в теме
примерно так:
Код
objShellApp=СоздатьОбъект("Shell.Application");
objFolder=objShellApp.NameSpace(СокрЛП(ФЭК));
objItem=objFolder.ParseName(СокрЛП(ФЭ)); 
размеры=objFolder.GetDetailsOf(objItem,26);
р = Найти(размеры, "x");
ширина = Число(Лев(размеры, р - 1));
высота = Число(Сред(размеры, р + 2));
Показать полностью

ФЭК - каталог с картинкой
ФЭ - название картинки
24. PeRom 51 23.10.08 12:57 Сейчас в теме
ФС АтрибутыФайла(ИмяФайла,РазмерФайла) уже НЕ РУЛИТ что ли???
РазмерФайла - переменная, принимающая размер файла в байтах.

Или простых путей не ищем? :) - Настоящие герои всегда идут в обход!
Lapitskiy; +1 Ответить
25. Mucmepukc 86 23.10.08 13:16 Сейчас в теме
я так понял, что не размер файла надо в байтах
размер картинки ширина*высота в пикселах
26. GSoft 2235 26.10.08 19:37 Сейчас в теме
речь именно о пикселах
в принципе задачку решил благодаря Mucmepukc

чуть позже появится время выложу то что получилось, а получилось интересно - если разрешение картинки меньше разрешения экрана, то она выводится в оригинальном разрешении, если больше то выполняется масштабирование в 90% от разрешения оргинала с сохранением пропорция
27. Abadonna 3958 28.10.08 09:41 Сейчас в теме
>ФС АтрибутыФайла(ИмяФайла,РазмерФайла) уже НЕ РУЛИТ что ли???
Еще как не рулит! Сохрани картинку 64х64 в bmp на 24 бита и в jpg. И что тебе размер файла покажет?
29. GSoft 2235 01.11.08 12:01 Сейчас в теме
Решение:

В форме элемента сотрудники объект картинка и кнопка показать фото, вызывающая одноименную процедуру
предварительно при выборе картинки создается копия картинки "Сотрудники-" + Код + ".jpg"

Код
//_____________________________________________________________________________
Процедура ПоказатьФото()   
   Конт = "Сотрудники-" + Код + ".jpg";
   ОткрытьФормуМодально("Отчет.ОтобразитьКартинку", Конт);
КонецПроцедуры   // ПоказатьФото
Показать полностью


Обработка Отобразить Картинку
На форме объект картинка и кнопка закрывающая окошко, так как формексом урезана верхняя панель с кнопками закрытия/сворачивания.
Детально расписывать не буду - основные нужные комментарии есть.


Код
Перем Ширина;
Перем Высота; 
Перем ИмяФайла;
Перем Окно;        
Перем разрШирина;
Перем разрВысота;             
Перем ОпределилиРазмерКартинки;
Перем АтрибутФормыКартинка;



//_____________________________________________________________________________
Функция ОпределитьРазмерКартинки()
   Ширина ="";
   Высота = "";   
   
   Попытка
      objShellApp = СоздатьОбъект("Shell.Application");
      objFolder = objShellApp.NameSpace(глКаталогКартинок);
      objItem = objFolder.ParseName(СокрЛП(ИмяФайла));
      
      Размеры = objFolder.GetDetailsOf(objItem, 26);
      
      //пример Шир х Выс
      Размеры = СокрЛП(Размеры); 
      //уберем пробелы
      Размеры = СтрЗаменить(Размеры, " ", "");
      Ширина = Число(Лев(Размеры, Найти(Размеры, "x") - 1));
      Высота = Число(Сред(Размеры, Найти(Размеры, "x") + 1));
      Возврат 1;
   Исключение
      Возврат 0;
   КонецПопытки;
КонецФункции   // ОпределитьРазмерКартинки


//_____________________________________________________________________________
Процедура ПриОткрытии()  
   ИмяФайла =  Форма.Параметр;   
   ОпределилиРазмерКартинки = 0; 

   Если ПустоеЗначение(ИмяФайла) = 1 Тогда
       //интерактивный запуск
      Предупреждение("Это служебная обработка и отдельно не используется",60);
      СтатусВозврата(0);
      Возврат;
   КонецЕсли;
   
   Путь = глКаталогКартинок + ИмяФайла; 

   Если ФС.СуществуетФайл(Путь) = 0 Тогда
      СтатусВозврата(0);
      Возврат;
   КонецЕсли;
   
   Если ОпределитьРазмерКартинки() = 0 Тогда
      //не определить размер картинки
      картОбъект.РежимРисования(3);        
   Иначе        
      ОпределилиРазмерКартинки = 1; 
      Окно = СоздатьОбъект("Окна");   
      Окно.ПолучитьРазрешение(разрШирина, разрВысота);  
      
      АтрибутФормыКартинка = СоздатьОбъект("АтрибутФормы");
      АтрибутФормыКартинка.УстановитьАтрибут(Форма,"картОбъект");
   КонецЕсли;
   
   картОбъект.Загрузить(Путь);
КонецПроцедуры   // ПриОткрытии


//_____________________________________________________________________________
Процедура ПослеОткрытия()       
   Если ОпределилиРазмерКартинки = 0 Тогда
      СтатусВозврата(0);
      Возврат;
   КонецЕсли;
                   
   Окно.ЦентрироватьОкно(Форма);   
   
   Если (Ширина * 1.2 > разрШирина) или (Высота * 1.2 > разрВысота)   Тогда
      //размер картинки больше разрешения экрана
      //найдем масштаб по ширине картинки относительно ширины разрешения
      //к примеру ширина картинки составляет 150% от ширины разрешения
      ШиринаМасштаб = (100 * Ширина) / разрШирина;
      
      //найдем масштаб по высоте картинки относительно высоты разрешения
      //к примеру высота картинки составляет 150% от высоты окна 1С
      ВысотаМасштаб = (100 * Высота) / разрВысота;    
      
      //определим какой "масштаб больше" и по нему и будем масштабировать картинку
      Масштаб = ?(ШиринаМасштаб > ВысотаМасштаб, ШиринаМасштаб, ВысотаМасштаб);
      
      //масштабирование сделаем 90% относительно разрешения
      ШиринаМасштаб = (Ширина * 90) / Масштаб;
      ВысотаМасштаб = (Высота * 90) / Масштаб;
      
      АтрибутФормыКартинка.УстановитьКоординаты(0,0, ШиринаМасштаб, ВысотаМасштаб);
      картОбъект.РежимРисования(3);
      ШиринаОкна = ШиринаМасштаб + 5;
      ВысотаОкна = ВысотаМасштаб + 5;
   Иначе                           
      //размер картинки меньше разрешения экрана
      АтрибутФормыКартинка.УстановитьКоординаты(0,0, Ширина, Высота);
      картОбъект.РежимРисования(2);   
      ШиринаОкна = Ширина + 5;
      ВысотаОкна = Высота + 5;
   КонецЕсли;
   
   Окно.РазмерОкна(Форма, ШиринаОкна, ВысотаОкна);              
   Окно.СтильОкна(Форма, 1); 
   Форма.кнЗакрыть.Видимость(1); 
КонецПроцедуры // ПослеОткрытия()

Показать полностью
30. GSoft 2235 05.11.08 15:49 Сейчас в теме
для изменения отрисовки достаточно в этом блоке

Код
//масштабирование сделаем 90% относительно разрешения
ШиринаМасштаб = (Ширина * 90) / Масштаб;
ВысотаМасштаб = (Высота * 90) / Масштаб;
Показать полностью


заменить 90 % на нужное число
31. GSoft 2235 05.11.08 15:52 Сейчас в теме
вот собственно скриншот.
Прикрепленные файлы:
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день