Рад приветствовать приверженцев Кла-на и им сочувствующих!
Весна, наверное, виновата, но проблема ни как не решается.
Задача очень простая. Надо «перелить» данные из bmp файла в очередь (ди). Кол-во очередей изначально неизвестно – определяется в процессе исходя из размера этого самого БээМПэ файла.
Итак, задача первая: как создать в Run Time очередь?
Идем дальше. Надо из заголовка bmp файла найти (считать и преобразовать) ширину (в пикселях) изображения.
Для этого были произведены следующие действия:
1. Создан (прописан в словаре) Dos-файл со String’овым полем длиной 2000 знаков. На сколько я понял, именно этой 2000-символьной матрицей (шаблоном) будут считываться порции данных из прописанного в переменную пути физического bmp файла.
2. Открываю файл, считываю в цикле 2000 символьные порции данных.
3. Из первой порции выделяю 4 байта начиная с 19 символа (ширина изображения).
4. Преобразую их в десятеричную систему исчисления.
Может я, конечно, не правильно понимаю, но считывать эти четыре байта надо в обратной последовательности. Сначала 22, затем 21, потом 20 и в конце – 19. Примерно так:
loc:CString = VAL(Sub(IND:Name,22,1))&VAL(Sub(IND:Name,21,1))&VAL(Sub(IND:Name,20,1))&VAL(Sub(IND:Name,19,1))
Но это только теоретические выкладки собственного умонапряжения. На практике это, увы, не приводит к нужному результату.
И последний вопрос. Как, зная (надеюсь на это) ширину изображения, создать динамически (вопрос первый) очередь со строкой, длина которой равна этой самой ширине. Или, попросту говоря, как создать в процессе исполнения очередь, с определяемой в рантайме длиной строки.
Может быть у кого есть пример какой на эту (эти) тему.
С уважением и благодарностью
=New User=
Слить данные из bmp файла в динамически созданную очередь.
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Re: Слить данные из bmp файла в динамически созданную очеред
цитировать не буду
но не вижу никаких проблем
но не вижу никаких проблем
Код: Выделить всё
BMPQueueCollection QUEUE,TYPE
File &STRING
END
myClass CLASS
Q &BMPQueueCollection,PRIVATE
Construct PROCEDURE()
Destruct PRCOEDURE(),VIRTUAL
ReadFile PROCEDURE(STRING FileName)
END
myClass.Construct PROCEDURE
CODE
SELF.Q &= NEW BMPQueueCollection
myClass.Destruct PROCEDURE
I LONG
CODE
LOOP I = 1 TO RECORDS(SELF.Q)
GET(SELF.Q,I)
DISPOSE(SELF.Q.File)
END
FREE(SELF.Q)
DISPOSE(SELF.Q)
myClass.ReadFile PROCEDURE(STRING FileName)
tmp MAVReadWRite
len LONG
CODE
! через DOS файл неинтересно, лучше за один раз прочитать весь файл средствАми API, пример есть в файловом архиве
IF tmp._Open(FileNAme)
! ошибка
RETURN
END
len = tmp._Bytes()
CLEAR(SELF.Q)
SELF.Q.File &= NEW STRING(len)
ADD(SELF.Q)
IF tmp._Read(SELF.Q.File,len)
! ошибка
END
tmp._Close()
! всё, файл картинка у нас в очереди
Re: Слить данные из bmp файла в динамически созданную очеред
вот ссылочкаAndrew Myalin писал(а): ! через DOS файл неинтересно, лучше за один раз прочитать весь файл средствАми API, пример есть в файловом архиве
http://www.clarionlife.net/component/op ... s/gid,141/