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

04.11.14

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

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

Скачать файлы

Наименование Файл Версия Размер
Рисование картинки
.epf 35,37Kb
88
.epf 1.0 35,37Kb 88 Скачать

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

* Кодирование данных (массив байт) в 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 Платные (руб)

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

6000 руб.

16.01.2015    61797    43    59    

80

[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)

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

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

5000 руб.

14.01.2016    54403    16    21    

42

Управление дашбордами

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

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

2400 руб.

29.06.2020    16698    21    4    

35

Новогоднее оформление для 1С

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

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

27.12.2023    10738    750    elcoan    45    

106

Конструктор HTML, CSS и javascript

Инструментарий разработчика Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

2 стартмани

10.04.2023    9615    151    acces969    31    

118

Модель состояния для MVC

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    3666    kalyaka    2    

27

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    12080    1    5    

10
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. alex_4x 85 05.11.14 11:52 Сейчас в теме
Даешь DOOM на языке 1С ! :-)
2. Pasha1st 837 03.01.15 00:14 Сейчас в теме
На базе этой обработки сделал формирование штрихкодов без использования внешних компонент здесь
3. гыук320 17 02.10.15 21:21 Сейчас в теме
Кто-нибудь встречал что-то наподобие на управляемых формах?
4. Pasha1st 837 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 361 30.09.19 11:15 Сейчас в теме
К сожалению работает очень долго. Хорошо бы переработать на новые функции 1с.
Оставьте свое сообщение