Создание рисунка BMP средствами 1С8 без использования компонент

04.11.14

Разработка - Работа с интерфейсом

Набор методов для создания растрового рисунка без использования внешних компонент и без использования файлов.
Возможности:
* Создание рисунка с цветностью 1,4,8 или 24 бит на пиксель.
* Для 1-8 битных цветов возможно управлять палитрой.
* Можно импортировать рисунок из объекта "Картинка", содержащий любое растровое изображение.
* Сохранение картинки в "Двоичные данные"
* Рисование примитив - линия, окружность (с заливкой или без), прямоугольник (с заливкой или без)
* Копирование фрагментов изображения
* Примитивный вывод текста

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Рисование картинки
.epf 35,37Kb ver:1.0
93
93 Скачать (1 SM) Купить за 1 850 руб.

Потребовалось мне как-то создавать штрихкоды без использования внешних компонент и шрифтов. Из этого получилась в итоге данная обработка. Попутно были решены следующие задачи:

* Кодирование данных (массив байт) в Base64-строку и обратно. Позволило проводить все операции в памяти.

* Написал функции для работы с двоичной арифметикой (почти полностью не пригодились Wink)

* 1С8 использует для текста кодировку Unicode (UCS-2), сделал таблицу преобразования Unicode->Win1251

Уже после нашел подобную обработку , но моя мне нравится больше Wink

Планирую выложить в ближайшее время формирование штрихкодов на базе этой обработки, и сделать аналогичную для векторного WMF/EMF формата.

Для работы требуется создать структуру функциями СоздатьКартинку() или СоздатьКартинкуИзКартинки()
Все методы для работы с изображениями принимают первым параметром эту структуру.
В структуре есть свойства:

  • Параметры - структура с описанием характеристик изображения, свойства Высота, Ширина, БитНаПиксель, ЦветФона. Создание изображения требует именно эту структуру параметром.
  • Палитра - массив объектов Цвет. Если БитНаПиксель=24, создается пустой массив
  • Данные - массив массивов-строк, содержащих данные о цветах пикселей.

Координаты считаются слева направо (0..Ширина-1) и сверху вниз (0..Высота-1)

Для вывода текста используется "шрифт" - картинка с изображениями символов, расположенных в сетке 16x16, в кодировке ANSI (Win1251). В обработку вшил готовые шрифты 6x8, 10x16, 14x24, 16x32 как макеты типа "двоичные данные" "font"+8/16/24/32 - по высоте символа в пикселях. Возможно добавить свой шрифт, назвав как "font"+идентификатор.

Цвет, если явно не оговорено другое (например что используется встроенный объект Цвет) - число, номер в палитре для 1-8-битных изображений и упакованное RGB 24-разрядное целое.

Предлагаются следующие методы:

* Конструкторы

Функция СоздатьКартинку(Параметры)

Функция СоздатьКартинкуИзКартинки(картинка)

Возвращают инициализированный объект.

Примеры:

к=СоздатьКартинку(Новый Структура("Ширина,Высота,БитНаПиксель,ЦветФона",150,60,4,12)); //150x60, 4 бит, залить цветом 12

к=СоздатьКартинку(Новый Картинка ("C:\test.jpg"));

* Сохранение

//Сохранить подготовленную картинку в файл формата BMP
Процедура СохранитьКартинкуВФайл(картинка,ИмяФайла)

//Сохранить подготовленную картинку в ДвоичныеДанные
Функция СохранитьКартинкуВДанные(картинка)

* Рисование

//Изменяет глубину цветности для картинки
Процедура КартинкаИзменитьБитность(картинка,НовыйБитНаПиксель)

//Изменяет глубину цветности для картинки, работает более быстро но менее точно. Преобразование 24->8 практически не отличается от стандартного варианта
Процедура КартинкаИзменитьБитностьБыстро(картинка,НовыйБитНаПиксель)

//Установить значение пикселя по координатам
Процедура КартинкаУстановитьПиксель(картинка,столбец,ряд,цвет)

//Получить значение пикселя
Функция КартинкаПолучитьПиксель(картинка,столбец,ряд)

//Получить цвет пикселя как объект Цвет()
Функция КартинкаПолучитьЦветПикселя(картинка,столбец,ряд)

//Рисование линии с произвольными координатами от (столбец1,ряд1) до (столбец2,ряд2)
Процедура КартинкаЛиния(картинка,столбец1,ряд1,столбец2,ряд2,цвет)

//Рисование окружности с указанным центром и радиусом. Если указан ЦветФона происходит заливка
Процедура КартинкаОкружность(картинка,столбец,ряд,радиус,цвет,ЦветФона=неопределено)

//Перенос фрагмента одной картинки в другую. Цвета не пересчитываются, т.е. картинки должны быть совместимы по палитрам или быть 24-бит. Ширина и Высота фрагмента - по умолчанию весь размер источника
Процедура КартинкаКопироватьУчасток(картинка,КартинкаИсточник,Столбец,Ряд,СтолбецИсточника=0,РядИсточника=0,Ширина=0,Высота=0)

//Рисование прямоугольника. Если указан ЦветФона происходит заливка
Процедура КартинкаПрямоугольник(картинка,столбец1,ряд1,столбец2,ряд2,ЦветГраницы,ЦветФона=Неопределено)

//Вывести указанный текст в указанные координаты
Процедура КартинкаВывестиТекст(картинка,столбец,строка,текст,шрифт)

* Служебные

//Преобразование объекта Цвет в число. Пример: цвет=ПолучитьЦвет24(Новый Цвет(10,60,255));
Функция ПолучитьЦвет24(цв)

//Обратное для ПолучитьЦвет24 преобразование - из числа в объект Цвет()
Функция Число24ВЦвет(цв)

//Получает шрифт (ч/б картинку) заданного размера. Поддерживаются размеры 8,16,24,32 - ширина и высота в пикселях. Можно указать используемый цвет фона (по умолчанию 1) и цвет текста (по умолчанию 0)
Функция ПолучитьШрифт(размер,ЦветТекста=Неопределено,ЦветФона=Неопределено)

* Прочие

// Получение кода символа в кодировке Win-1251
 Функция КодСимволаANSI(симв)

//Битовый сдвиг влево на число бит
Функция ДвВлево(ч,сдвиг)

//Битовый сдвиг вправо на число бит
Функция ДвВправо(ч,сдвиг)

//Битовое НЕ для указанного числа младших бит
Функция ДвНЕ(ч,ширина)

//Двоичное И двух чисел
Функция ДвИ(ч1,ч2)

//Двоичное ИЛИ двух чисел
Функция ДвИЛИ(ч1,ч2)

//Возвращает строку - кодированные по Base64 данные, представленные массивом байт. На входе массив байт
Функция КодироватьБ64(данные)

//Возвращает массив чисел - байт, декодированных из Base64 строки
Функция ДекодироватьБ64(строка)

 


Минусы:

Работает довольно медленно для больших изображений.

Не делал масштабирование

Не делал заливку произвольных областей

BMP рисование картинки

См. также

Работа с интерфейсом Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    55298    17    23    

43

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Богатый редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    63691    44    59    

82

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    19543    27    6    

42

Работа с интерфейсом Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Редактор графов в 1С - внешний отчет, который формирует графы на основе таблицы значений, используя рисунки табличного документа. Есть возможность добавления, редактирования объектов графа и выгрузки результата в таблицу значений.

1500 руб.

06.10.2020    10762    7    7    

11

Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    20781    mrXoxot    44    

128

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    10269    smielka    37    

105

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    17734    1223    elcoan    53    

125
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. alex_4x 87 05.11.14 11:52 Сейчас в теме
Даешь DOOM на языке 1С ! :-)
2. Pasha1st 850 03.01.15 00:14 Сейчас в теме
На базе этой обработки сделал формирование штрихкодов без использования внешних компонент здесь
3. гыук320 18 02.10.15 21:21 Сейчас в теме
Кто-нибудь встречал что-то наподобие на управляемых формах?
4. Pasha1st 850 03.10.15 00:12 Сейчас в теме
(3) гыук320, Можно использовать и в управляемых формах.
Весь основной код находится в модуле объекта, функции экспортируются.
В режиме управляемой формы потребуется оформить процедуру формирования картинки на сервере.

&НаСервере
Функция ПолучитьМодульФормы()
	Возврат РеквизитФормыВЗначение("Объект");
КонецФункции

&НаСервере
Функция СформироватьТестЛистНаСервере()
	Обработка=ПолучитьМодульФормы();
        к=Обработка.СоздатьКартинку(Новый Структура("Высота,Ширина",10,10));
...
Показать

Ну и так далее. Более подробно можно посмотреть в обработке формирования штрихкодов http://infostart.ru/public/321943/
гыук320; +1 Ответить
5. seacat 22.03.19 08:46 Сейчас в теме
Интересно, но 4500 печаль
6. vladnet 371 30.09.19 11:15 Сейчас в теме
К сожалению работает очень долго. Хорошо бы переработать на новые функции 1с.
Оставьте свое сообщение