Слить данные из bmp файла в динамически созданную очередь.

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
NewUser
Старожил
Сообщения: 238
Зарегистрирован: 10 Ноябрь 2005, 23:07
Откуда: Краснодар
Благодарил (а): 6 раз

Слить данные из bmp файла в динамически созданную очередь.

Сообщение NewUser »

Рад приветствовать приверженцев Кла-на и им сочувствующих!
Весна, наверное, виновата, но проблема ни как не решается.
Задача очень простая. Надо «перелить» данные из 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=
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Re: Слить данные из bmp файла в динамически созданную очеред

Сообщение Andrew™ »

цитировать не буду
но не вижу никаких проблем

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

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()

 ! всё, файл картинка у нас в очереди
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Re: Слить данные из bmp файла в динамически созданную очеред

Сообщение Andrew™ »

Andrew Myalin писал(а): ! через DOS файл неинтересно, лучше за один раз прочитать весь файл средствАми API, пример есть в файловом архиве
вот ссылочка
http://www.clarionlife.net/component/op ... s/gid,141/
Ответить