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

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

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

Плюсы:

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

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

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

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

Минусы:

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

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

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

 

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

Обновление 2.12.13

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

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

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

См. также

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

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

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

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

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