ZINT BarCode для Clarion

Программы на Clarion, шаблоны, библиотеки и пр.
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4549
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

ZINT BarCode для Clarion

Сообщение Игорь Столяров »

kreator писал(а):
13 Февраль 2020, 10:19
В любом случае её нужно превращать в 32-битную.
Нет. :) Возвращаемся к примеру. Есть рисунок 30x40 пикселей 24-битной глубиной цвета. Размер его bitmap = 30*40*3 Byte.
Если бы мы преобразовали его к 32-битной палитре, то размер его bitmap = 30*40*4 Byte. Но это не так.
Constantine писал(а):
13 Февраль 2020, 10:11
1. BITMAP = BITMAPINFOHEADER + пиксели. Если Вы его разместили в обычной памяти с помощью функции CreateCompatibleBitmap, то он и есть просто bitmap,
2. DIB = тот же самый BITMAP в DIB-секции, ее можно разместить как в обычной памяти, так и в контексте устройства (DC),
3. Файл *.BMP = BITMAPFILEHEADER + тот же самый BITMAP. Он может быть как в оперативной памяти (если Вы его там сформируете), так и на диске.
Всё верно, только BITMAP = пиксели (кодирование цвета каждого пикселя), и тогда без путаницы в терминологии:
DIB = INFOHEADER + BITMAP
BMP = FILEHEADER + DIB = FILEHEADER + INFOHEADER + BITMAP
(там ещё есть опциональные палитры - но мы их не юзаем)
«V» значит Вендетта !

Constantine
Активист
Сообщения: 183
Зарегистрирован: 07 Февраль 2017, 16:58

ZINT BarCode для Clarion

Сообщение Constantine »

ОК, пусть будет так.
Все равно непонятно, зачем нужно перекодировать?

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4549
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

ZINT BarCode для Clarion

Сообщение Игорь Столяров »

Constantine писал(а):
13 Февраль 2020, 10:41
Все равно непонятно, зачем нужно перекодировать?
Ха ! А как мне это непонятно … но иначе не работает. :(
Тоже в начале думал, что сейчас быстренько запишу bitmap напрямую в ?Image и всё заработает, но нет.

Здесь есть связанный и возможно ключевой вопрос.
Есть два рисунка (?Image1 и ?Image2). В ?Image1 как-то загрузили картинку. Как нам скопировать эту картинку в ?Image2 ?
«V» значит Вендетта !

Constantine
Активист
Сообщения: 183
Зарегистрирован: 07 Февраль 2017, 16:58

ZINT BarCode для Clarion

Сообщение Constantine »

Так, становится более-менее понятно... :-)
А если файл, сформированный ZINT, напрямую, через интерфейс Клариона, вставить в Image, - показывает?

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4549
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

ZINT BarCode для Clarion

Сообщение Игорь Столяров »

Constantine писал(а):
13 Февраль 2020, 10:58
А если файл, сформированный ZINT, напрямую, через интерфейс Клариона, вставить в Image, - показывает?
Конечно. Причём оба варианта прекрасно работают:

Код: Выделить всё

?Image{Prop:Text} = ZINT_FILE.BMP
?Image{Prop:ImageBits} = LoadFileToString(ZINT_FILE.BMP)
«V» значит Вендетта !

Constantine
Активист
Сообщения: 183
Зарегистрирован: 07 Февраль 2017, 16:58

ZINT BarCode для Clarion

Сообщение Constantine »

А что такое LoadFileToString?

kreator
✯ Ветеран ✯
Сообщения: 3633
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

ZINT BarCode для Clarion

Сообщение kreator »

Прикольно, однако.
Игорь Столяров писал(а):
13 Февраль 2020, 10:55
Здесь есть связанный и возможно ключевой вопрос.
Есть два рисунка (?Image1 и ?Image2). В ?Image1 как-то загрузили картинку. Как нам скопировать эту картинку в ?Image2 ?
Я делаю так:

Код: Выделить всё

  GLO:Legend1GradientColour = ?IMAGE1{prop:ImageBits}  

Код: Выделить всё

  create(i#, CREATE:image)
  i#{prop:ImageBits} = GLO:Legend1GradientColour
We are hard at work… for you. :)

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4549
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

ZINT BarCode для Clarion

Сообщение Игорь Столяров »

Constantine писал(а):
13 Февраль 2020, 11:08
А что такое LoadFileToString?
Ну я же не "программист" 1С, что бы называть методы ВозвращаетСтрокуССодержаниемФайла() … ;)
kreator писал(а):
13 Февраль 2020, 11:14
GLO:Legend1GradientColour
Пардон, а как эта переменная описана ? По идее - String, но какой длины ?
«V» значит Вендетта !

Constantine
Активист
Сообщения: 183
Зарегистрирован: 07 Февраль 2017, 16:58

ZINT BarCode для Clarion

Сообщение Constantine »

Правильно ли я понимаю, что если Кларионовскому Image подсунуть файл ZINT целиком, - проблем нет?

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4549
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

ZINT BarCode для Clarion

Сообщение Игорь Столяров »

Constantine писал(а):
13 Февраль 2020, 11:27
если Кларионовскому Image подсунуть файл ZINT целиком, - проблем нет?
Да верно, проблем нет. Впрочем, как и с любым другим файлом BMP ...
«V» значит Вендетта !

Constantine
Активист
Сообщения: 183
Зарегистрирован: 07 Февраль 2017, 16:58

ZINT BarCode для Clarion

Сообщение Constantine »

Ну, если так, то, похоже, Кларион под {PROP:ImageBits} понимает тупо копию ФАЙЛА в памяти. Причем, любого: BMP, GIF и т.п.
Соответственно, и подсовывать ему в этом случае надо файл: BIMAPFILEHEADER + BITMAPINFOHEADER + пиксели.
Можно, для эксперимента, считать файл ZINT ЦЕЛИКОМ в область памяти с помощью ReadFile, а ее адрес подсунуть {PROP:ImageBits}.
Если сработает, то к картинке ZINT нужно прицепить BITMAPFILEHEADER и получившуюся конструкцию перенести в обычную область памяти.

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4549
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

ZINT BarCode для Clarion

Сообщение Игорь Столяров »

Constantine писал(а):
13 Февраль 2020, 11:51
перенести в обычную область памяти
Спасибо. Вы сейчас дословно описали работу метода ZintClass.BitmapToImage(), который всё это делает. :)
Но путь к этому был не очевиден … ;)

В ZINT есть ещё возможность генерить векторные форматы (SVG), но я с этим ещё не разбирался.
«V» значит Вендетта !

kreator
✯ Ветеран ✯
Сообщения: 3633
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

ZINT BarCode для Clarion

Сообщение kreator »

Игорь Столяров писал(а):
13 Февраль 2020, 11:22
kreator писал(а): ↑
13 Февраль 2020, 11:14
GLO:Legend1GradientColour

Пардон, а как эта переменная описана ? По идее - String, но какой длины ?
Ну у меня специфический кусок. String обычный, 2000 символов. Грубо говоря, с запасом. Я чётко уверен, что границу не перейду. По-хорошему, надо динамически делать.
We are hard at work… for you. :)

Constantine
Активист
Сообщения: 183
Зарегистрирован: 07 Февраль 2017, 16:58

ZINT BarCode для Clarion

Сообщение Constantine »

Игорь Столяров писал(а):
13 Февраль 2020, 11:58
Вы сейчас дословно описали работу метода ZintClass.BitmapToImage(), который всё это делает.
Я старался... :-)
С учетом того, что я понятия не имею, что такое ZINT...

Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 4549
Зарегистрирован: 07 Июль 2005, 9:19
Откуда: г. Ростов-на-Дону

ZINT BarCode для Clarion

Сообщение Игорь Столяров »

RaFaeL писал(а):
18 Февраль 2020, 18:34
но вот bmp нельзя, просят dib или bitmap
Понимаете, в одной деревне всех звали Буратино … так и с этими BMP, DIB, bitmap. :(
Кто как хочет - так и называет всю эту графическую мешанину.

DIB это BMP файл без BITMAPFILEHEADER.
Значит с начала BMP файла пропускаем Size(BITMAPFILEHEADER),
а собственно bitmap находится со смещением bfOffbits от начала BMP файла.

Код: Выделить всё

BITMAPFILEHEADER  Group,Type
bfType                   UShort
bfSize                   ULong
bfReserved1              UShort
bfReserved2              UShort
bfOffbits                ULong    ! Смещение Bitmap
                       end
«V» значит Вендетта !

Ответить