Сохранение картинки со штрихкодом

Автор sau, 01 декабря 2024, 21:14

« назад - далее »

sau

Картинка=СоздатьОбъект("Картинка");
Объект.РежимРисования(3);
Картинка.НарисоватьШтрихкод(Картинка,58,Знч);
Картинка.Сохранить("qr.bmp");

Не сохранется...
На форме (в Картинке) рисуется.
Есть решение?

MWW_Ruza

А что такое "qr.bmp" - ?
Где он должен быть?

Тут в СП:
Сохранить(<?>);
Синтаксис:
Сохранить(<ИмяФайла>)
Назначение:
Сохранить картинку в файле в формате загрузки.
Параметры:
<ИмяФайла> - строка с именем файла.

Строка с именем файла должна быть с полным путем к нему, ну, например: "C:\Temp\qr.bmp"...
Иначе, он просто не понимает, где сохранять.

MWW_Ruza

А вообще, не все так просто...
С полным путем то он сохраняет, только в непойми-каком формате, и полученный файл не открывается...

MWW_Ruza

Процедура Сформировать()
   ЗагрузитьВнешнююКомпоненту("FormEx.dll");
   Сервис = СоздатьОбъект("Сервис");
   Карт = СоздатьОбъект("Картинка");
   Карт.РежимРисования(3);
   Сервис.НарисоватьШтрихкод(Карт,58,"https://forum.dorex.pro/index.php?topic=202.0");
   Картин.УстановитьКартинку(Карт);
   Карт.Сохранить("C:\Temp\qr.bmp");
КонецПроцедуры

Картин - идентификатор картинки на форме.

Так и на форме рисуется, и в файл сохраняется, но файл некорректного формата.

sau

Цитата: MWW_Ruza от 01 декабря 2024, 21:50Строка с именем файла должна быть с полным путем к нему, ну, например: "C:\Temp\qr.bmp"...
Иначе, он просто не понимает, где сохранять.
Ну, конечно, это для краткости изложения :).
И речь, конечно, о возможности чтения файла...

leov-001


АЛьФ

Такая проблема только с картинками, на которых штрих-код рисуется? Картинка, полученная методом РасширениеФормы::ПолучитьКартинку(), нормально сохраняется?

Харлампий Дымба

Может это пригодится: метод Сохранить() выгружает картинку в файл с именем <ИмяФайла> в формате загрузки (загрузили в формате bmp — в этом формате и сохраним). Файл может быть следующих форматов:.wmf   .emf   .ico   .bmp   .dib   .rle.
Может попробовать каждый из этих форматов?
Хотя, как я понимаю, штрихкод в zint в Сервис::ПолучитьКартинку() в .png рисуется, поэтому штатными средствами вряд ли.

sau

Цитата: Харлампий Дымба от 02 декабря 2024, 11:20Может это пригодится: метод Сохранить() выгружает картинку в файл с именем <ИмяФайла> в формате загрузки (загрузили в формате bmp — в этом формате и сохраним). Файл может быть следующих форматов:.wmf   .emf   .ico   .bmp   .dib   .rle.
Может попробовать каждый из этих форматов?
Хотя, как я понимаю, штрихкод в zint в Сервис::ПолучитьКартинку() в .png рисуется, поэтому штатными средствами вряд ли.
Да, и пробовали предварительно загружать существующий файл указанных форматов, потом генерировать штрих-код. Результата нет.

MWW_Ruza

Тут похоже Формекс вообще ни при чем - это штатнвй метод 1С сохранения картинки так отрабатывает...
Вот, закомментировано все, что касается Формекса, и только загружается картинка готовая из библиотеки:



Процедура Сформировать()
   ЗагрузитьВнешнююКомпоненту("FormEx.dll");
//   Сервис = СоздатьОбъект("Сервис");
   Карт = СоздатьОбъект("Картинка");
//   Карт.РежимРисования(3);
//   Сервис.НарисоватьШтрихкод(Карт,58,"https://forum.dorex.pro/index.php?topic=202.0");
   Карт.Загрузить("Стрелки");
   Картин.УстановитьКартинку(Карт);
   Карт.Сохранить("C:\Temp\qr.bmp");
КонецПроцедуры

Пустая форма, кроме кнопки сформировать только один объект - картинка с идентификатором "Картин".
"Стрелки" - картинка из библиотеки картинок конфигурации.
Файл - пишется нормально, никаких ошибок не дает - но он так-же не читаем, как и QR-код, если его нарисовать Формексом...
Вот, что на выходе: https://cloud.mail.ru/public/dJkX/JHpQrangt

PS #7 - А как формат сохранения задать? Только расширением файла? Ну, пробовал, все доступные в методе расширения - кроме имени файла (точнее, его расширения), ничего не меняется, содержимое остается тем-же.

MWW_Ruza

Цитата: АЛьФ от 02 декабря 2024, 11:02Картинка, полученная методом РасширениеФормы::ПолучитьКартинку(), нормально сохраняется?

Надо попробовать... Но, тут задача у ТС похоже немного другая, если я правильно понял, ему нужно картинку сохранять из формы, а не из печатной формы...
А тут, из СП:
// процедура вызывается из объекта Картинка, расположенного на печатной форме
Если только что-то мудрить с отрисовкой ПФ без ее вывода, и созранения в файл картинки, полученной в нее этим методом... Надо попробовать такие "танцы с бубном". Только пока не понятно, будет без вывода ПФ работать или нет.

MWW_Ruza

Не, с печатной формой тоже не работает, хоть с Показать(), хоть без:

Процедура Сформировать()
   Таб      = СоздатьОбъект("Таблица");
   Таб.ИсходнаяТаблица("Таблица");
   Таб.ВывестиСекцию("Секция_1");
//   Таб.Показать();
КонецПроцедуры

Процедура ПолучитьКартинку(Карт)
   Картин    = СоздатьОбъект("Картинка");
   Картин.Загрузить("Стрелки");
    Карт.УстановитьКартинку(Картин);
   Карт.Сохранить("C:\Temp\qr.bmp");
КонецПроцедуры



Файл сохранчется, но так-же не читаем.
 

Djelf

Все вы позабыли... Даже то что не знали ;)


Картинка=СоздатьОбъект("Картинка");
Сервис=СоздатьОбъект("Сервис");
Сервис.НарисоватьШтрихкод(Картинка,58,Штрихкод);
Система=СоздатьОбъект("Система");
Система.СохранитьКартинку(ИмяКаталога,ИмяФайла,Картинка);

MWW_Ruza

Так, (файлик предварительно сохранен из интерфейса конфигуратора интерактивно и открывается), пересохраненный программно, тоже не читаем:

Процедура Сформировать()
    Таб        = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Таблица");
    Таб.ВывестиСекцию("Секция_1");
    Таб.Показать();
КонецПроцедуры

Процедура ПолучитьКартинку(Карт)
    Картин    = СоздатьОбъект("Картинка");
//    Картин.Загрузить("Стрелки");
    Картин.Загрузить("C:\Temp\Стрелки.bmp");
    Карт.УстановитьКартинку(Картин);
    Карт.Сохранить("C:\Temp\qr.bmp");
КонецПроцедуры

MWW_Ruza

Да, так:

Процедура Сформировать()
   ЗагрузитьВнешнююКомпоненту("FormEx.dll");
   ЗагрузитьВнешнююКомпоненту("1CPP.dll");
   Картинка    = СоздатьОбъект("Картинка");
   Сервис      = СоздатьОбъект("Сервис");
   Сервис.НарисоватьШтрихкод(Картинка,58, "https://forum.dorex.pro/index.php?topic=202.new#new");
   Система    = СоздатьОбъект("Система");
   Система.СохранитьКартинку("C:\Temp\", "Qr.bmp", Картинка);
КонецПроцедуры

Работает, сохраняет идеально... Только это уже не FormEx, и не штатные методы 1С, а 1cpp...
Задачу решает полностью, без затрат практически, все равно во всех рабочих базах 1cpp используется, но не отвечает на вопрос - почему штатный метод 1С уродует картинку при сохранении.