gifts2017

Класс для работы с рисунками в формате BMP (чистый 8.x без внешних компонент)

Опубликовал Serj (Serj1C) в раздел Программирование - Работа с интерфейсом

Возможности:
- Позволяет читать файлы BMP и вносить в них некоторые изменения из кода 1С;
- Создание рисунков «с нуля»;
- Набор примитивных инструментов: Изменение размера холста, получение цвета точки (пипетка), попиксельно рисование (карандаш), рисование окружностей, прямых, прямоугольников, треугольников и наличие заливки;
- Полученный файл можно конвертировать в любой формат (опять же средствами 1С).

Плюсы:

- Работа в контексте сервера 1С предприятия;

- Наличие работоспособного примера с вызовом всех описанных функций;

- Описание приложено в справку;

- Просто интересно как оно устроено.

Минусы:

- Скорость (довольно медленно, особенно заметно на больших размерах, узкое место - заливка);

- Отсутствие универсальности (работает не со всеми разновидностями формата по части глубины цвета, палитр, реверсивности строк и т.п.);

- Изображения с шириной/высотой 10, 266, 522, 778, 1034... из-за особенностей кодировки не записываются (т.к. символ 10 является для платформы 1С служебным и перед ним добавляется «возврат каретки», что нарушает внутреннюю структуру файла).

 

Писалось для себя, без особой надобности, ради интереса. Забыл сказать, что модуль объекта - это и есть класс, форма - пример работы с ним.

Обновление 2.12.13

- Поддержка всех размеров, устранено ограничение первой версии.

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

Наименование Файл Версия Размер
BMP.epf 129
.epf 21,51Kb
02.12.13
129
.epf 21,51Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Serj (Serj1C) 05.11.10 22:52
(0) Убогая картинка в анонсе кстати была нарисована в 1С
В обработке приведен этот скрипт
На форме поле ввода позволяет на лету выполнять код и радоваться результату))
2. Сергей Старых (tormozit) 10.11.10 13:35
3. влад кон (delwish) 10.11.10 17:02
скоро 1С заменит винду - paint уже готов :D
4. Serj (Serj1C) 10.11.10 19:33
(3) В конфигураторе паинт всегда был))
5. Александр Цегельников (markers) 13.11.10 13:02
Ну что сказать, несомненно плюс!!!! Если б ещё JPG делать, вообще была бы красава :))
6. Serj (Serj1C) 13.11.10 21:26
(5) Максимум, что могу предложить - PNG (для таких убогих картинок - идеальный вариант)
	Имя_PNG = ПолучитьИмяВременногоФайла("PNG");
	ЭлементыФормы.Рисунок.Картинка.Преобразовать(ФорматКартинки.PNG);
	ЭлементыФормы.Рисунок.Картинка.Записать(Имя_PNG);
	ЗапуститьПриложение(Имя_PNG);
...Показать Скрыть

В jpeg 1С преобразовывать не хочет, пишет "Ошибка преобразования картинки"
7. Александр Цегельников (markers) 14.11.10 23:07
8. Андрей Гросу (trustgros) 14.12.11 18:25
отличная вещь. думаю пригодится
9. Serj (Serj1C) 02.12.13 21:39
Обновление 2.12.13

- Поддержка всех размеров, устранено ограничение первой версии.
10. Илья Агафонов (kazimesh) 31.08.15 18:12
Привет всем. Может кому-нибудь пригодится. У меня Функция Прочитать(ИмяФайла) вызывала ошибку "Неожиданный конец файла", когда я просил нарисовать не с нуля, а свыбранного файла. Убрал прерывание на ошибке, получил считывание картинки сжатой по оси Y в два раза. Разбор кода показал, что вот этот блок в процедуре:
Данные = ЧтениеПотока(Поток, Ширина*ГлубинаЦвета + Дополнение, БайтПрочитано);
			Если Данные=Неопределено Тогда
				ОписаниеОшибки = "Неожиданный конец файла";
				//Возврат Ложь;
				Прервать;
			КонецЕсли;
...Показать Скрыть

вызывает ускоренное чтение переменной "Поток", а нужен он только для проверки. Комментинируем этот блок - все работает хорошо.
11. Serj (Serj1C) 01.09.15 08:41
(10) kazimesh, Возможно в заголовке файла используется палитра или нестандартная глубина цвета.
Полную поддержку формата я не реализовывал, о чем указал в "минусах".

Но больше всего мне не нравится скорость. Хочется добавить версию через COMОбъект("ADODB.Stream")
12. Serj (Serj1C) 03.02.16 12:29
Ждем 8.3.9, можно работать с двоичными данными!
http://v8.1c.ru/o7/201602bin/index.htm
13. Den (Dvornik) 20.05.16 06:31
Может не в тему вопрос. А толщину отрезка можно задавать?
14. Serj (Serj1C) 20.05.16 09:49
(13) Dvornik, Нет, но могу предложить нарисовать 3 отрезка