|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
SFF (Structured Fax File) is a representation especially for Group 3 fax documents. Формат описан в спецификации CAPI 2.0 http://www.capi.org/download/capi20-1.pdf Задача: из многостраничного TIFF, да хоть бы из нескольких bitmap сделать SFF. Как кодировать заголовок файла и заголовки страниц, думаю проблем не возникнет. Некоторые наработки по данному формату есть, т.е. структуру немного представляю: Как заполнить структуру по одному байту? Вопрос как записать данные изображения. CAPI 2.0 SFFB.2.3 Page Data Page data is coded line by line: data describes each pixel row. Lines are coded as records of variable length; each line is coded according to the element coding in the page header. At present, only modified Huffman coding is supported. MH coding is bit-oriented: the pixel bits are stored in the bits of code words, least significant first. No EOL code words or fill bits are included. If the data includes EOL code words, COMMON-ISDN-API ignores these. Each record is identified by the first byte: • 1...216: a pixel row with 1...216 MH-coded bytes follows immediately • 0: escape code for a pixel row with more than 216 MH-coded bytes. In this case, the following word in the range 217...32767 defines the number of MH-coded bytes which follow. Annex B (Normative): SFF Format 155 • 217...253: white space, skip 1...37 empty lines • 254: start of page header (see above) • 255: if followed by a byte with value 0, illegal line coding. Applications may choose whether to interpret this line as empty or as a copy of the previous line. If this byte is followed by a byte with a value 1...255, then 1...255 bytes of additional user information follow (reserved for future extensions). Все что я понял, это то что используется "modified huffman". Т.е. по логике взять картинку, представить ее через bitmap или нечто подобное через GDI(+/-) как обычно делали. Потом этот bitmap закодировать в "modified huffman" и записать в файл (где идут данные страницы). Ну понятно ручками по байту, винды и GDI таких фильтров не предоставляют. Нужны примеры. Готовых утилит практически нет. Только лишь Ghostscript (device "cfax")-это работает, но конвертирует только из pdf (с ps у меня не получилось). pdf из tiff сделать не проблема конечно (libtiff делает). Но это как лететь из Москвы в Питер через Нью-йорк. Наработки по данному формату есть в проекте http://sourceforge.net/projects/sfftools/ откуда собственно взял анализ структуры SFF (ссылка на CИ-шный форум выше), но проект умеет sff -> tiff (bmp и т.д.) а не наоборот. Мне надо в обе стороны. Ghostscript (device "cfax")-это кстати патч от автора sfftools но других вариантов не предлагается. Или дохлая идея написать это самому? По сути вопрос: как закодировать изображение в "modified huffman"? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2012, 21:42 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Дмитрий77Или дохлая идея написать это самому? По сути вопрос: как закодировать изображение в "modified huffman"? Из приведенного отрывка не совсем понятно что они имеют в виду под "modified Huffman" Вернее не совсем понятно что именно они кодируют. В стандартном Хаффмане делается подсчет количества букв в тексте, А - 10 раз, Б - 30 раз, В -2 раза и так далее. Потом на основе этих количеств строят дерево. (Загляни в Википедию там хорошее объяснение как это делается). И на основе дерева каждому символу задается код. В итоге частые буквы кодируются меньшим количеством бит чем стандартные восемь, редкие могут кодироваться и большим количеством бит. А вот что в SFF используется в качестве "букв" я не понимаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2012, 00:14 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
White Owl, Ну, делать все самому с нуля, это вообще темный лес. Но кодов я тоже нигде не вижу. GDI (+/-) позволяет делать следующие TIFF: Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Если предположить (в чем я не уверен, но есть основания предполагать что это так), что TiffCompressionRle = 5 это и есть modified Huffman, то по идее достаточно сохранить TIFF в этом формате виндами (что я умею), а затем подменить заголовки TIFF на заголовки на заголовки SFF (осталось изучить структуру TIFF). А данные страниц использовать те же. Как идея? Пока сделал TIFF -> (libtiff) ->PDF -> (Ghostscript) -> SFF Не знаю, на конвертацию нескольких страниц секунды 2 уходит. SFF используется для передачи факса через CAPI 2.0 (файл тупо передается байт за байтом). Других форматов CAPI не кушает (по спецификации якобы кушает, но на деле только SFF - авторы CAPI драйверов этим не заморачиваются). Прога работает с TIFF , не городить же зоопарк (если не CAPI, то TIFF - родной формат). Если мое предположение про TiffCompressionRle верно, то высшим пилотажем было бы перекодирование TIFF в SFF на лету , т.е. без конвертации в физический SFF, а просто подменой заголовков в процессе передачи данных (ну и при приеме при записи в файл). ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2012, 03:21 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Дмитрий77Как идея?Ужасно. RLE - Run-Length Encoding. Совершенно другой принцип. Дмитрий77Пока сделал TIFF -> (libtiff) ->PDF -> (Ghostscript) -> SFF Не знаю, на конвертацию нескольких страниц секунды 2 уходит.В принципе жить можно, если тебя устраивает. Дмитрий77 высшим пилотажем было бы перекодирование TIFF в SFF на лету , т.е. без конвертации в физический SFF, а просто подменой заголовков в процессе передачи данных (ну и при приеме при записи в файл).Это можно сделать. Затягиваешь весь TIFF в память, разворачиваешь его в битмап, сочиняешь новый заголовок, кодируешь битмап. И обратно в таком же порядке. От промежуточного битмапа не уйти, а будешь ты его держать целиком в памяти или скидывать во временный файл уже не так важно. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2012, 03:39 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
White OwlRLE - Run-Length Encoding. Совершенно другой принцип. Понимание принципов виндами, libtiff, Ghostscript-ом, вентафаксом, Kodac Imaging (список можно продолжить) сильно отличаются друг от друга. Все эти тифы более-менее уживаются друг с другом когда речь идет о тифе. Что до SFF, в SFF-вьюерах как правило есть опция TIFF, но открывают они TIFF-ы только определенного формата, который они окрестили Modified Huffman. Мне такой волшебный TIFF родить пока не удалось ни одним из известных мне способов. Например в Kodac Imagine создаешь тифф CCITT Group 3(1d) Modified Huffman (там так написано), SFF -viewer ругается. Готовишь TIFF принтером от CAPI-fax, SFF -viewer радуется и показывает, открываешь его в Kodac Imagine, пишет CCITT Group 3(1d) Fax, пересохраняешь в том же формате (CCITT Group 3(1d) Fax) через Kodac Imagine, SFF -viewer ругается. White OwlДмитрий77Пока сделал TIFF -> (libtiff) ->PDF -> (Ghostscript) -> SFF Не знаю, на конвертацию нескольких страниц секунды 2 уходит.В принципе жить можно, если тебя устраивает. А у меня других вариантов нет пока. (принтеры из коммерческих специфических софтов не рассматриваю, хотя любую быструю command prompt utility спер бы оттуда с удовольствием, а вот нет). White OwlОт промежуточного битмапа не уйти, а будешь ты его держать целиком в памяти или скидывать во временный файл уже не так важно. Ну, если TIFF в "волшебном" формате Modified Huffman, то можно и не держать целиком. Только этот Tiff сделать похоже также сложно как и SFF. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2012, 04:31 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
авторКонвертер TIFF(BMP...)->SFF самому написать реально? Нереального в этом ничего нет - его придумывали живые люди и реализовывали тоже живые и обычные. И в документе вам описали АЛГОРИТМ. Просто берите и реализовывайте его. Что не понятно - берете простенький рисунок и анализируете как он сохранился в этом формате. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2012, 05:44 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Я вам даже мог бы за деньги таких конвертеров, хоть на C++, хоть на PHP даже. Но только не на бейсике =))) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2012, 05:46 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
На Java, например: :) http://thorntonzone.com/manuals/Compression/Fax,%20IBM%20MMR/MMSC/mmsc/index.html http://thorntonzone.com/manuals/Compression/Fax,%20IBM%20MMR/MMSC/mmsc/uk/co/mmscomputing/imageio/tiff/index.html http://thorntonzone.com/manuals/Compression/Fax,%20IBM%20MMR/MMSC/mmsc/uk/co/mmscomputing/imageio/sff/index.html ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2012, 05:52 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
AndreTM, Ну, третья ссылка (нижняя) вроде по теме. Дошел до этого файла: http://thorntonzone.com/manuals/Compression/Fax,%20IBM%20MMR/MMSC/mmsc/uk/co/mmscomputing/io/ModHuffmanOutputStream.java Но, честно, ява, немного пугает. Было бы на C++ хотя б законченный проект, чтоб можно было скомпилировать и пощупать (типа SFF Tools), я б разобрался м.б. Edd.DragonНо только не на бейсике =))) Если "конвертация из tiff на ходу" (через структуры и байтики) , то C++. Если чисто конвертер, то VB для меня оптимален, хотя бы битмапы получать через GDI +/-. И будут ли эти алгоритмы работать быстрее GS (pdf из tiff через libtiff мгновенно делается, GS работает значительно дольше), даже если убить кучу времени? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2012, 06:51 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
авторpdf из tiff через libtiff мгновенно делаетс А это потому, что там фактически ничего не делается. Берем тифы и как есть пихаем в контейнер формата pdf. Это как "архивирование" без сжатия )) А на счет бейсика, я не к тому, что медленно или не удобно, так сложилось, что я его стороной обходил и обхожу по привычке - привык к сиподобному синтаксису. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2012, 08:08 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Дмитрий77, ничего оригинального не скажу. Если есть описание, всё можно сделать. Разница в синтаксисах языков здесь несущественна. В спецификации не указан алгоритм Modified Huffman Coding, веротно, по причине "это обычный алгоритм". Но тут авторы неправы - если они претендуют на "well-established standard", то должны быть ссылки на другие документы, стандарты в частности. По кодировке - вот нагуглилось по быстрому (вероятно, в табл. 10.4 ошибка - длина последовательности 62 указана дважды, скорее всего, последняя строка в правой половине относится к длине 63). Наверное, оно, наверное, можно найти гораздо больше и с примерами реализации. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2012, 13:46 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Бенедикт, спасибо что откликнулись. Ну с Modified Huffman понятно надо разбираться. Но надо от чего-то отталкиваться. Я всеми этими GDI занимался крайний раз м.б. год назад. Т.е. как мне получить "незакодированное сырье", кот. я собираюсь кодировать? Взял я CMultiFrameImage, загрузил туда документ TIFF, каждый фрейм -одна страница. Характеристики того что должно быть на выходе: resolution=203х196 либо resolution=203х98 (не знаю почему в SFF 203x а не 204x, на входе будет TIFF с 204x). Ширина должна быть 1728, TIFF в 204х98 сплющен в двое по вертикали. Так понимаю, надо сначала отформатировать frame1 (?) Потом как-то его прочесть (?) кодировать уже потом... Т.е. вопрос как мне из frame1 получить "сырье" (тут подсказали уже что это bitmap - однозначно ч/б), и как мне его перевести в байты, кот. я потом буду перемешивать согласно Huffman. В понятиях могу тупить. Т.е. я пока не врубился в задачу. Заголовки для SFF я допустим напишу, зная характеристики "страничек", и т.п разрешение, высоту-ширину, число фреймов... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2012, 14:58 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Дмитрий77, здесь две подзадачи: 1) как получить адрес тела битмапа или его части (причём, в нужном формате); 2) как получить доступ в удобном виде к области памяти, адрес (начала) которой известен (в си-подобных языках это просто, да и в некоторых диалектах basic-а, но в VB удобный и быстрый способ - отдельная проблемка). 1) В GDI+: для этого есть пара функций GdipBitmapLockBits()/GdipBitmapUnlockBits() . В GDI: имея HBITMAP, проще всего вызвать функцию GetObject() (которая системная, а не VBA-шная), передав ей структуру BITMAP (или DIBSECTION). Но в этом случае нет преобразования формата. Применительно к CMultiFrameImage, можно взять для примера метод Frame1bpp(). Создаётся DIB-секция, адрес нулевой скан-линии монохромного битмапа возвращается в pBits, после Render имеем преобразованное к монохромному необходимое "сырьё". "Сырьё" лежит в виде несжатых скан-линий, для монохромного битмапа формат описан здесь . 2) Доступ к сырью удобно и быстро можно получить, если слегка обмануть VB и организовать safe array, который VB будет воспринимать как обычный двухмерный массив с элементами соответствующего типа (Byte, Integer, или Long; для монохромного битмапа актуальны скорее Integer или Byte). Пример для 32-битного цвета и, соответственно, пикселя, представленного как элемента двухмерного массива типа Long, можно посмотреть в 12429897 , класс CDrawingSurface, при #Const PRAGMA_SAFE = False, методы Init, Class_Terminate, свойства Pixel. Функцию VarPtrArray лучше описать как входящую в msvbvm60.dll (...VarPtrArray Lib "msvbvm60"...). Осталось только правильно вычислять индексы элементов массива и выделять из них нужные биты ;) . ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2012, 18:04 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Бенедикт, Туплю, не могу уловить Читал, читал часа 4 Ну, допустим, Код: vbnet 1. 2. 3. 4. 5. 6.
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
picSrc.Render -ну вроде заполнил этот битмап с форматированием pBits -выводит большое число, похожее на адрес с данными битмапа читаю 10 байтов этих данных выводит 10 нулей Как быть, где данные, пытаюсь прочитать не 10 а 100 байтов (0 To 99) -уходит в crash, пытаюсь не задавать размерность массива - тоже уходит в crash. Ничего не понимаю, что делать надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2012, 04:55 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Дмитрий77, для начала Код: vbnet 1.
, если параметры CopyMemory описаны как As Any, As Any, ByVal As Long ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2012, 11:21 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Бенедикт, >, если параметры CopyMemory описаны как As Any, As Any, ByVal As Long Так и есть Код: vbnet 1. 2. 3.
Сделал так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Чего-то появилось (надо думать данные битмапа): Код: vbnet 1. 2. 3. 4. 5. 6.
Дальше идей пока нет. Так понимаю у меня по битмап есть еще bmiDst, кот. содержит BITMAPINFO, которое содержит bmiHeader Как это увязать с BITMAP structure, ссылку на которую давали выше не понимаю. Короче хочу получить "не знаю что" ("сырье" -видится мне как набор байтов) и преобразовать это "не зная как" (Modified Huffman) в "чего надо"-тоже видится мне как набор байтов. А это "чего надо" запихать в файл по байтам (после местного SFF-заголовка страницы) и обозвать SFF-ом. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2012, 12:37 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Дмитрий77, да, это данные битмапа. Ссылку на структуру BITMAP я давал в первую очередь из-за секции Remarks в описании структуры, хотя и про саму BITMAP знать полезно. pBits указывает на начало 0-вой скан-линии (Scan 0). Скан-линии выравнены по границе 16-битного слова, имеют длину для монохромного битмапа (((ширина битмапа в пикселях) + 15) \ 16) байт (кстати, это значение будет в BITMAP.bmWidthBytes, если заполнить BITMAP вызовом GetObject()). Соответственно, полный размер данных монохромного битмапа в байтах равен (((ширина битмапа в пикселях) + 15) \ 16) * (высота битмапа в пикселях (=количество скан-линий)). Но это число имеет смысл если работать с данными битмапа как с одномерным массивом. Я предлагал не заниматься копированием и работать с данными битмапа как с двумерным массивом, но это, наверное, на текущий момент перебор. Что дальше? +, -, *, \ для вычисления индекса элемента массива, в котором находится пиксель. And, степени двойки, операции сравнения для работы со значениями пикселей. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2012, 13:29 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Ну хорошо, например (ширина битмапа в пикселях) x (высота битмапа в пикселях) = 1728x2339 >Соответственно, полный размер данных монохромного битмапа в байтах равен (((ширина битмапа в пикселях) + 15) \ 16) * (высота битмапа в пикселях (=количество скан-линий)). Там целого числа не получается. Откуда +15? Правильно ли я понимаю, что незакодированное "сырье" это будет массив размером 1728x2339 (двумерный или одномерный), состоящий из 0-лей (белый пиксель) и единиц (черный пиксель)? Если да, то наверно должны быть примеры как это получить. Видимо это то что вы описали ниже: БенедиктЧто дальше? +, -, *, \ для вычисления индекса элемента массива, в котором находится пиксель. And, степени двойки, операции сравнения для работы со значениями пикселей. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2012, 13:38 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Дмитрий77Там целого числа не получается."\" и "/" - разные операции.Дмитрий77Откуда +15?Выравнивание на границу 16 бит.Дмитрий77Правильно ли я понимаю, что незакодированное "сырье" это будет массив размером 1728x2339 (двумерный или одномерный), состоящий из 0-лей (белый пиксель) и единиц (черный пиксель)?Нет. И да, я неправильно написал, что размер скан-линии (и массива) в байтах. Правильно - в словах, т. е. в байтах в два раза больше. Итого: (1728 + 15) \ 16 = 108 слов = 216 байт = длина скан-линии. Размер массива 108 слов * 2339 = 252612 слов = 505224 байт.Дмитрий77Если да, то наверно должны быть примеры как это получить.Что получить? Ширину-высоту изображения мы знаем, формат пикселя (1 бит на пиксель, т. е. 8 пикселей в байте = 16 пикселей в слове) задаём сами. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2012, 14:16 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Бенедикт, ладно я тупой но не настолько, видимо недавняя возня с C-шными кодами таки пошла на пользу. Кажется что-то стало связываться. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51.
Ну например первые 2 сканлинии: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
М-м-м... Ну во-первых мне кажется, у меня где-то ошибка при заполнении/перезаполнении байтового массива сканлинии, уж больно одинаково они выглядят, я смотрел например 8-ю и 9-ю линии через paint по клеточкам, должны быть разные, у меня одинаковые. Вот что не так, может ReDim каждый раз делать надо? Или адрес откуда читаю в CopyMemory не так ставлю? Далее думаю, мне надо вот это: Each record is identified by the first byte: =216!!!(мой случай) • 1...216: a pixel row with 1...216 MH-coded bytes follows immediately (если биты в сканлинии сплошь нули) • 217...253: white space, skip 1...37 empty lines Ну, не знаю, надо ли в коде рассматривать случаи (1-215)• 1...216: a pixel row with 1...216 MH-coded bytes follows immediately • 0: escape code for a pixel row with more than 216 MH-coded bytes. In this case, the following word in the range 217...32767 defines the number of MH-coded bytes which follow. Просто на входе всегда tiff отформатированный под ширину 1728 (=216 байт как уже понятно стало) Т.е. каждую ScanLine надо мудифицировать по Modified Huffman, получить более короткий битовый массив, засунуть биты в байты, и эти байты бухать в файл (216)+чего получилось. Либо (217...253) по числу белых сканлиний. Смотрю в книгу: http://www.iet.unipi.it/m.luise/HTML/SdT/10_4%20Modified%20Huffman%20Coding.htm и пока вижу фигу. Чего я должен там увидеть? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2012, 16:25 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Дмитрий77, до воскресенья активно помочь уже не смогу. Что вижу сейчас - второй параметр CopyMemory не ByVal, количество выведенных 0/1 раза в два раза меньше чем 1728. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2012, 17:44 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Дмитрий77, увидеть - способ кодировки. Пример в конце страницы разобрали? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2012, 17:44 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Бенедиктколичество выведенных 0/1 раза в два раза меньше чем 1728. Ну, это я формальную ошибку сделал, хоть и прыгаю через байт, но при этом каждое i дает таки 8 битов, а не 16: Код: vbnet 1. 2. 3. 4. 5. 6.
Бенедиктвторой параметр CopyMemory не ByVal, если написать Код: vbnet 1.
то выдаются одни единицы 111111111111111111111111111"" Если как я делаю Код: vbnet 1.
то выдаются "одинаковые" сканлинии. (чуть чуть отличаются вначале) с таким же успехом могу написать 0 Код: vbnet 1.
Вывод: что-то я не то получаю вместо данных битмапа . Причем там слишком много единиц, а у меня на картинке около 7 верхних линий чисто белые - нули же должны быть тогда...? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2012, 03:50 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Короче, пока так: Я нашел следующий код: True Colour DIBSection Там как раз описывается метод, предложенный Бенедиктом: VarPtrArray на двухмерный массив: У меня "заработал" следующий (буквально) код: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114.
Я добивался получения такой "картинки" (слово "Fax" написанное черным по белому нарисовано "единицами"). Не видно?-отодвиньтесь на метр от экрана. 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000011111111111111110000000000000000000000000000000000000000 0000000011111111111111110000000000000000000000000000000000000000 0000000000011100000000010000000000000000000000000000000000000000 0000000000011100000000010000000000000000000000000000000000000000 0000000000011100000000000000000000000000000000000000000000000000 0000000000011100000000000000000000000000000000000000000000000000 0000000000011100000000000000000000000000000000000000000000000000 0000000000011100000000000000000000000000000000000000000000000000 0000000000011100000010000000011111111000111111001111111000000000 0000000000011100000010000000011111111000111111001111111000000000 0000000000011111111110000000111000011100001111001110000000000000 0000000000011111111110000000111000011100001111000110000000000000 0000000000011100000110000000000011111100000011101000000000000000 0000000000011100000110000000000011111100000011101000000000000000 0000000000011100000000000000011100011100000001111100000000000000 0000000000011100000000000000011100011100000001111100000000000000 0000000000011100000000000001110000011100000011011110000000000000 0000000000011100000000000001110000011100000011011110000000000000 0000000000011100000000000001110000011100000011011110000000000000 0000000000011100000000000001110001111100001100000111100000000000 0000000000011100000000000001110011111100001110000111100000000000 0000000011111111100000000000111110011110111110001111111000000000 0000000011111111100000000000111110011110111110001111111000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 В принципе я мог бы обойтись и одномерным массивом в одну Scanline. Ну да ладно. Для того чтоб нарисовать эту картинку мне понадобилось методом тыка сделать сдедующее: 1) поменять "1" и "0" местами, потому как белое рисовалось единицами, а не нулями. Я сделал это через Public Function GetBitXY 2) читать сканлинии не от 0 до bmiDst.bmiHeader.biHeight - 1 (сверху вниз) а снизу вверх: Код: vbnet 1.
3) читать не слово Word (2 байта), а читать по одному байту при этом переворачивая биты от 7 до 0 (в обратном порядке), а не от 0 до 7 как я делал. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
Вопросы делятся на две группы: I: Правильно ли я понимаю что 1) битмап в памяти перевернут (читать надо снизу вверх) 2) следует читать по одному байту (а не по два), при этом биты там перевернуты (обратный порядок) 3) нули надо заменять на единицы. Ну, могу допустить, что функция Frame1bpp предложенная Бенедиктом что-то сама переворачивает. Но это все эстетика, а понять сейчас нужно следующее: II: Чего будет "сырьем" для Modified Huffman? Сгодится ли то что я получил в качестве сырья. 1) белое - это нуль? Или нет? 2) Кодируем начиная с последней скан линии? Или нет? 3) Биты в каждом байте переворачиваем? Или нет? Не, конечно можно методом тыка. Ну например если будет получаться негатив, то поменять 0 на 1, 1 на 0. Ну лучше чтоб грамотные люди объяснили. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.06.2012, 08:55 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Мне этот кодер написать почти удалось, но не могу сказать что очень рад. Проблемы такие: 1) Медленно он работает ; GS быстрее (хоть и тоже медленно). Если быстрее не заработает, то эта возня на неделю не стоит свеч (ибо с GS я уже сделал). Что можно оптимизировать? Вкратце: К данным битмап имею доступ через двухмерный массив bDib(), как советовал Бенедикт. Код: vbnet 1.
(здесь вряд ли тормозит) Далее (не считая частного случая белых линий) сканирую по одной ScanLine, считаю нули и единицы и кодирую их по MH тупо функциями Код: vbnet 1. 2.
которые используют Код: vbnet 1. 2. 3. 4.
где MH и зашит (значения брал из libtiff, в том документе что приводился много ошибок). Получаю строку битов (нули и единицы), добавляю EOL Ее тупо бью по 8 символов и превращаю в байты тупой ф-цией Код: vbnet 1.
При этом крайние несколько символов дописываю "нулями" до границы байта ( и здесь не уверен что делаю правильно!!! ). Код привожу ниже целиком. 2) У меня где-то ошибка. Где понять не могу. Декодер (вьюер) заламывает некоторые строчки картинки. Подозреваю что проблема связана с неправильным выравниванием по границе байта. В CAPI документе сказано: =CAPIMH coding is bit-oriented: the pixel bits are stored in the bits of code words, least significant first. No EOL code words or fill bits are included. If the data includes EOL code words, COMMON-ISDN-API ignores these. В другом документе сказано, что якобы нули надо добавлять перед EOL (000000000001) чтоб добить доцелых байтов, пробовал и до и после, есть ряд строк, которые получаются битые (почему не знаю), и вьюером не отображаются. Как правильно выровнять по границе байта? Код модуля привожу (основная ф-ция Public Sub CreateSFFFile()) Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. 533. 534. 535. 536. 537. 538. 539. 540. 541. 542. 543. 544. 545. 546. 547. 548. 549. 550. 551. 552. 553. 554. 555. 556. 557. 558. 559. 560. 561. 562. 563. 564. 565. 566. 567. 568. 569. 570. 571. 572. 573. 574. 575. 576. 577. 578. 579. 580. 581. 582. 583. 584. 585. 586. 587. 588. 589. 590. 591. 592. 593. 594. 595. 596. 597. 598. 599. 600. 601. 602. 603. 604. 605. 606. 607. 608. 609. 610. 611. 612. 613. 614. 615. 616. 617. 618. 619. 620. 621. 622. 623. 624. 625. 626. 627. 628. 629. 630. 631. 632. 633. 634. 635. 636. 637. 638. 639. 640. 641. 642. 643. 644. 645. 646. 647. 648. 649. 650. 651. 652. 653. 654. 655. 656. 657. 658. 659. 660. 661. 662. 663. 664. 665. 666. 667. 668. 669. 670. 671. 672. 673. 674. 675. 676. 677. 678. 679. 680. 681. 682. 683. 684. 685. 686. 687. 688. 689. 690. 691. 692. 693. 694. 695. 696. 697. 698. 699. 700. 701. 702. 703. 704. 705. 706. 707. 708. 709. 710. 711. 712. 713. 714. 715. 716. 717. 718. 719. 720. 721. 722. 723.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2012, 05:21 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Дмитрий77У меня где-то ошибка. Где понять не могу. Декодер (вьюер) заламывает некоторые строчки картинки. Подозреваю что проблема связана с неправильным выравниванием по границе байта. В CAPI документе сказано: CAPIMH coding is bit-oriented: the pixel bits are stored in the bits of code words, least significant first. No EOL code words or fill bits are included. If the data includes EOL code words, COMMON-ISDN-API ignores these. В другом документе сказано, что якобы нули надо добавлять перед EOL (000000000001) чтоб добить доцелых байтов, пробовал и до и после, есть ряд строк, которые получаются битые (почему не знаю), и вьюером не отображаются. Как правильно выровнять по границе байта? С этим я разобрался. После кода makeUp должен в обязательном порядке стоять код term, даже если 0. Кодер глючил на DoWhite(64), так как нулевой код терминации не дописывался. Выравнивание по границе байта скорее всего ни причем, EOL тоже можно думаю не ставить (если верить CAPI-цитате), а просто добить строку нулями кратно 8. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39.
Узрел мелкую проблему: Один из немецких вьюеров ругается на мой файл. Пишет "Gleitkommadivision durch Null" (что-то насчет деления ну нуль) -файл сгенерированный через GS он отображает без ругани. Два остальных вьюера мой файл отображают. Немцам что-ли написать (te-systems.de, их вьюер ругается), может помогут ошибку найти в моем SFF? Ну и, нужна помощь по оптимизации кода на предмет быстродействия , код привел в предыдущем посте. Подозреваю, что проблема торможения в том 1) как я высчитываю биты 2) как я их потом через анализ String загоняю через mid в байты. Но у меня пока "чистых" идей как бороться с этими "типами данных" нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2012, 15:10 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Дмитрий77Узрел мелкую проблему: Один из немецких вьюеров ругается на мой файл. Пишет "Gleitkommadivision durch Null" (что-то насчет деления ну нуль) -файл сгенерированный через GS он отображает без ругани. Два остальных вьюера мой файл отображают. Немцам что-ли написать (te-systems.de, их вьюер ругается), может помогут ошибку найти в моем SFF? Нашел глюк: Код: vbnet 1. 2. 3.
Почему-то пишет в файл байт со значением "2", что не совместимо с понятиями чести того вьюера. А должно быть "1", странно... Сделал так (в человеко-читаемом виде): Код: vbnet 1. 2. 3. 4. 5. 6. 7.
Глюк ушел, пишет 1. Непонятно еще, что с количеством '\0' в конце файла делать (соседний топик). Так что, с оптимизацией/быстродействием никто не поможет? Кажется это все что мне надо для полного счастия. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2012, 16:53 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Оптимизации? Хотя бы так... Посмотрим на последний кусочек листинга writeLine() : Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Код: vbnet 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2012, 22:05 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
AndreTM, Спасибо что откликнулись. Ну скажем так, берем насыщенный файл 1 страница если GS, то время конвертации ~1сек (это с учетом промежуточного pdf-а) это я назвал "долгим". если мой исх. код, то 5-6 сек если чуть модифицировать (с вашей подсказкой, но по своему), то в 5 сек укладывается, ладно убедили Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Если делать с вашей библиотекой, то те же 5 сек, фактически никакого выигрыша, а тащить за собой эту dll или пытаться вникнуть в ее исходники, не уверен что надо, тем более по вашей ссылке исходников нет. P.S. У вас ошибка в строчке ниже (делите на 8), тем более итак уже выровняли кратно 8 строчкой выше Код: vbnet 1.
Когда я игрался с "добычей сырья", т.е. чтением битмап, тоже долго работало. Я думаю основные тормоза где-то при чтении битмапа, а не при распечатке коротких code_Line. Вот только где? Еще, я работаю со String, м.б. надо какой другой метод использовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 01:54 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Обшибся я немного... Как обычно, чтобы реципиент подумал над алгоритмом... Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 01:55 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Дмитрий77Если делать с вашей библиотекой, то те же 5 сек, фактически никакого выигрыша, а тащить за собой эту dll или пытаться вникнуть в ее исходники, не уверен что надо, тем более по вашей ссылке исходников нетКак нет? А справа на странице ссылочка на ZIP? Да и просто распаковать экзешник - и получить библиотеку и пример использования в виде VB6-проекта? (в ссылке я просто ")" поставил впритык - а если скопировать ссылку руками? ) Там же (в библиотеке той), кстати, и асм'овская процедура получения бита из битмапа... попробуйте прикрутить... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 02:04 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
AndreTM, Там есть пример использования библиотеки и упомянутая dll, а не ее исходники. Для указанного вами места кода библиотека выигрыша не дает, разве попробовать бит вычислять и думать дальше что делать, если результат "ощутится". Но таскать ее за собой желания по любому нет. Проще Ghostscript таскать, тем более итак таскаю, ибо желания декодировать pdf-ы нет и не появится. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 02:18 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
AndreTM, Ну, хорошо, если сделать только Код: vbnet 1. 2. 3.
вместо моего Код: vbnet 1. 2. 3.
то результат уложится в 3 сек (говорим об exe, в среде будет + 1-2сек) Если еще добавить ваш предыдущий ход, то будет попадать в 2-3 сек. 1) Как отыграть еще 2 секунды даб хотяб догнать GS ? (перегнать похоже не получится в силу сложности алгоритма) 2) Как не использовать вашу библиотеку? Счас вы скажете что она на C, использует битовые сдвиги и на VB так нельзя. Я б с удовольствием загнал все в C++ для осуществления следующей идеи: Димавысшим пилотажем было бы перекодирование TIFF в SFF на лету , т.е. без конвертации в физический SFF, а просто подменой заголовков в процессе передачи данных (ну и при приеме при записи в файл). С самим MH проблем конечно не возникнет. Но 1) У меня там нет замечательного класса CMultiFrameImage а рожать его по нулям я не осилю 2) Я не уверен, что вставлять GDI в код Opal есть хорошая идея (хотя мне его Linux-мультисистемность не нужна) 3) Рассчитывать что tiff будет в MH нельзя, поэтому переписывать заголовки суть идея бредовая, битмап действительно надо держать в памяти, а оттуда читать сканлинии. Посему проще делать так: (дублирующие SFF-ы заранее готовить не хочу) Я параллельно 1)Конвертирую TIFF->SFF (не жду!) и 2) Начинаю процесс набора номера и досылки этого SFF как факса (Но если его вдруг не окажется на момент начала отправки факса, то будет Ж!!!). По идее SFF начинает быть доступным для чтения (отправки fax data) еще не "дописавшись", так что чего бояться - факс все одно идет дольше, еще пока номер наберется, пока там факс ответит... 3) потом удаляю Ну естественно чем быстрее процедура конвертации и чем меньше грузит компьютер, тем лучше. А вдруг сразу будут начаты 20 процедур конвертации -> отправки... В GS мне честно говоря не нравится то, что при вызове из VB (хоть бы все и vbHide), начинает мелькать всякими песочными часиками (вирусы так себя часто ведут, неприятно это). ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 03:10 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Неужели нет какой-нибудь родной API которая позволяет получить bit из байта? Хотя...большая часть изображения (незакодированного) -белый лист (или повторяется черное)... Стало быть GetBitX(255,a) и GetBitX(0,b) можно и не вычислять по 8 раз, результат и без вычислений ясен. Надо будет попробовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 04:27 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Дмитрий77Хотя...большая часть изображения (незакодированного) -белый лист (или повторяется черное)... Стало быть GetBitX(255,a) и GetBitX(0,b) можно и не вычислять по 8 раз, результат и без вычислений ясенДа, действительно... Реальная факс-информация - это текст, так что "белых" полей-строк будет большинство, ну и можно их сразу скидывать по шаблону... Еще можно попробовать записывать результирующий файл не побайтно, а сразу блоками (например, построчно). ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 10:09 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
AndreTM, Если сделать так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
то оставляя мой код generateByte(the_byte) для упомянутого файла в 3 секунды я укладываюсь. Если взять 52 страницы справочника по AT-командам модема, то сконвертируется за 43 секунды. Вроде неплохо но: GS эти 52 страницы конвертит за 3 !!! секунды. >Еще можно попробовать записывать результирующий файл не побайтно, а сразу блоками (например, построчно). Чего-то не пойму как это делать. Так как ниже не получается ничего (код не работает): Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
И я сильно сомневаюсь что это ускорит. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 11:54 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Впрочем, всё это - телодвижения Реально ускорить перекодирование можно только с помощью низкоуровневого "байт-интерпретатора". То есть либо C (без шарпов), либо ASM, либо Forth. На Форте, кстати, дело сводится только к перечислению 256 слов + ввод/вывод буфера. Но предлагать вам такое - это у меня рука не поднимается ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 12:04 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Короче, подведем итоги. По крайней мере с задачей справился. А уж где использовать GS, а где этот код позже буду смотреть. Если реально что-то можно улучшить (ускорить), я с удовольствием попробую. Код ниже это "текущая версия" с учетом всех плюсов/минусов. Ну и причесанная малость. Грубо, из любого TIFF 204x196 либо 204x98 шириной 1728 (а других не держим) я могу сделать SFF 203x196 либо 203x98 (в любой комбинации), ковертанув либо все страницы, либо последовательный блок страниц (от и до). Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156.
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. 293. 294. 295. 296. 297. 298. 299. 300. 301. 302. 303. 304. 305. 306. 307. 308. 309. 310. 311. 312. 313. 314. 315. 316. 317. 318. 319. 320. 321. 322. 323. 324. 325. 326. 327. 328. 329. 330. 331. 332. 333. 334. 335. 336. 337. 338. 339. 340. 341. 342. 343. 344. 345. 346. 347. 348. 349. 350. 351. 352. 353. 354. 355. 356. 357. 358. 359. 360. 361. 362. 363. 364. 365. 366. 367. 368. 369. 370. 371. 372. 373. 374. 375. 376. 377. 378. 379. 380. 381. 382. 383. 384. 385. 386. 387. 388. 389. 390. 391. 392. 393. 394. 395. 396. 397. 398. 399. 400. 401. 402. 403. 404. 405. 406. 407. 408. 409. 410. 411. 412. 413. 414. 415. 416. 417. 418. 419. 420. 421. 422. 423. 424. 425. 426. 427. 428. 429. 430. 431. 432. 433. 434. 435. 436. 437. 438. 439. 440. 441. 442. 443. 444. 445. 446. 447. 448. 449. 450. 451. 452. 453. 454. 455. 456. 457. 458. 459. 460. 461. 462. 463. 464. 465. 466. 467. 468. 469. 470. 471. 472. 473. 474. 475. 476. 477. 478. 479. 480. 481. 482. 483. 484. 485. 486. 487. 488. 489. 490. 491. 492. 493. 494. 495. 496. 497. 498. 499. 500. 501. 502. 503. 504. 505. 506. 507. 508. 509. 510. 511. 512. 513. 514. 515. 516. 517. 518. 519. 520. 521. 522. 523. 524. 525. 526. 527. 528. 529. 530. 531. 532. 533. 534. 535. 536. 537. 538. 539. 540. 541. 542. 543. 544. 545. 546. 547. 548. 549. 550. 551. 552. 553. 554. 555. 556. 557. 558. 559. 560. 561. 562. 563. 564. 565. 566. 567. 568. 569. 570. 571. 572. 573. 574. 575. 576. 577. 578. 579. 580. 581. 582. 583. 584. 585. 586. 587. 588. 589. 590. 591. 592. 593. 594. 595. 596. 597. 598. 599. 600. 601. 602. 603. 604. 605. 606. 607. 608. 609. 610. 611. 612. 613. 614. 615. 616. 617. 618. 619. 620. 621. 622. 623. 624. 625. 626. 627. 628. 629. 630. 631. 632. 633. 634. 635. 636. 637. 638. 639. 640. 641. 642. 643. 644. 645. 646. 647. 648. 649. 650. 651. 652. 653. 654. 655. 656. 657. 658. 659. 660. 661. 662. 663. 664. 665. 666. 667. 668. 669. 670. 671. 672. 673. 674. 675. 676. 677. 678. 679. 680. 681. 682. 683. 684. 685. 686. 687. 688. 689. 690. 691. 692. 693. 694. 695. 696. 697. 698. 699. 700. 701. 702. 703. 704. 705. 706. 707. 708. 709. 710. 711. 712. 713. 714. 715. 716. 717. 718. 719. 720. 721. 722. 723. 724. 725.
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66.
Модератор: Дим, не забывай про спойлер ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 12:55 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Кстати, для Хаффмана... Можно заменить CASE в termXX и makeXX на решето (напрямую - на Эратосфена). То есть, вместо выбора вариантов, - прямое обращение к массиву ответов. Выигрыш по скорости будет оптимальнее затрат на использоване памяти. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 13:58 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
AndreTMМожно заменить CASE в termXX и makeXX на решето (напрямую - на Эратосфена). То есть, вместо выбора вариантов, - прямое обращение к массиву ответов. Как это сделать? Не покажете на примере кода? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 15:27 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Дмитрий77AndreTMМожно заменить CASE в termXX и makeXX на решето (напрямую - на Эратосфена). То есть, вместо выбора вариантов, - прямое обращение к массиву ответов. Как это сделать? Не покажете на примере кода?Ну, если будет время - покажу... Просто мне очень лень реализовывать такой массив на VB... поскольку надо будет весь твой код анализировать... хотя-я... можно будет попробовать заменить четыре функции... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 15:43 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
AndreTM, А чего там анализировать. Есть две ф-ции: DoWhite(runlen As Long) DoBlack(runlen As Long) Они используют 4 функции: termWhite(runlen As Long) termBlack(runlen As Long) makeUpWhite(makeup As Long) makeUpBlack(makeup As Long) Вы предлагаете эти 4 на что-то заменить (массивы, константы). Вот я и прошу показать как это сделать. Я же не прошу весь массив за меня ручками рисовать. Рисовать весь, согласен, рутинная работа. Я из libtiff все это копировал, а потом 2-3 часа сидел проставлял все эти case: и сверял тупо по трем документам (типа как р/счет на квитанции заполняете, считаете нули и ругаетесь), потому как в этих нулях и единицах запутаться на раз-два, там где стоит '? там в исходнике (упоминается в начале поста) были ошибки. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 16:06 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
А что показывать? Примерно так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2012, 21:55 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
AndreTM, Ну, я сделал как вы сказали, а именно: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129.
ДимаЕсли взять 52 страницы справочника по AT-командам модема, то сконвертируется за 43 секунды. Вроде неплохо но: GS эти 52 страницы конвертит за 3 !!! секунды.AndreTMТо есть, вместо выбора вариантов, - прямое обращение к массиву ответов. Выигрыш по скорости будет оптимальнее затрат на использоване памяти. Зря старался, получилось 46 секунд вместо 43. Память растранжирили, скорость наоборот чуть упала. Склоняюсь к исходному варианту. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2012, 03:10 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Какой Variant , нах...? А не пробовали Array() As String ? Или еще проще - Dim termWhite() As String * 8 и так далее? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2012, 03:24 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
AndreTMКакой Variant , нах...? А не пробовали Array() As String ? Или еще проще - Dim termWhite() As String * 8 и так далее? Пробовал. Только Array() предполагает Variant, а если As String, то Array() выдаст Type Mismatch. Нет проблем, напишите как правильно. http://www.vb6.us/tutorials/understanding-arrays Another way to do this is with the Array function, which is convenient to use, but incurs the overhead of the Variant datatype. The way to use the function is as follows: First, declare a Variant variable to hold your array. It may be declared with or without the open parentheses. Recall that since Variant is the default datatype, the "As Variant" clause is optional: Dim astrDayAbbrev() As Variant Second, use the Array function to assign a list of data items to the variable : astrDayAbbrev = Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat") ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2012, 03:53 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Советы: 1. If- ElseIf - … - ElseIf -_End If в VB немного быстрее, чем Select - Case - … - End Select 2. Использование Dictionary возможно даст выигрыш, но это нужно проверять для конкретного случая. 3. Если использовать массивы, то лучше, действительно, задать переменные массива явно текстовыми: Dim termWhite(0 To 63) As String а инициализацию массива делать, задавая значение каждого элемента без Array("…") То есть: White(0) = "00110101" и т.д. И в массивах makeUpWhite() и makeUpBlack() незачем шагать через 64, достаточно объявить их как Dim makeUpWhite$(1 To 40) , makeUpBlack$(1 To 40), а индекс перед обращением к массиву делить на 64. 4. Наиболее тормознутой выглядит конкатенация строк, как улучшить – см. Как ускорить создание строковых буферов Еще вариант - набить массив, а затем выполнить Join, так как в Join реализован именно такой быстрый способ конкатенации. 5. Частое Put также может тормозить изрядно, лучше набивать в памяти буфер или байтовый массив приличного размера, а затем изредка добавлять его в файл. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2012, 08:41 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
ZVI3. Если использовать массивы, то лучше, действительно, задать переменные массива явно текстовыми: Dim termWhite(0 To 63) As String а инициализацию массива делать, задавая значение каждого элемента без Array("…") То есть: White(0) = "00110101" и т.д. И в массивах makeUpWhite() и makeUpBlack() незачем шагать через 64, достаточно объявить их как Dim makeUpWhite$(1 To 40) , makeUpBlack$(1 To 40), а индекс перед обращением к массиву делить на 64..Сделал: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276.
Для 52 страниц вместо 43 сек получил 42-43 сек, т.е. выигрыша никакого. Стоит ли проверять:ZVI1. If- ElseIf - … - ElseIf -_End If в VB немного быстрее, чем Select - Case - … - End SelectПредлагаете использовать ф-ции как в исходном варианте, но заменить case на If- ElseIf ? Стоит ли проверять:ZVI2. Использование Dictionary возможно даст выигрыш, но это нужно проверять для конкретного случая.И здесь поподробнее. Как это? ZVI4. Наиболее тормознутой выглядит конкатенация строк, как улучшить – см. Как ускорить создание строковых буферов Еще вариант - набить массив, а затем выполнить Join, так как в Join реализован именно такой быстрый способ конкатенации. Вы про это? Код: vbnet 1. 2. 3. 4. 5.
Вообще есть подозрение, что основная проблема именно при чтении bitmap, оптимизация получения значения бита (с библиотекой от AndreTM) дает чуть прирост скорости, но не очень сильный, причем это компенсируется той идеей что я сделал -не вычислять биты если байт =0 либо =255. Поэтому проблема возможно в конкатенации строк. Не подкрепите еще кодами? ZVI5. Частое Put также может тормозить изрядно, лучше набивать в памяти буфер или байтовый массив приличного размера, а затем изредка добавлять его в файл.Не покажете как на примере кода? Набивать String, а потом делать Put у меня ничего не получилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2012, 15:13 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
ZVIСоветы:4. Наиболее тормознутой выглядит конкатенация строк, как улучшить – см. Как ускорить создание строковых буферов Попробовал по 3-му ("самому быстрому") варианту: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123.
Т.е. пока имеем, что извращаем код до человеко-непонимания, а скорость не растет. Ну, в вашем примере 20000 конкатенаций на строку. А у меня 1728 (максимум!!!) это если белое и черное идут через пиксель (что практически нереально), в реальности их гораздо меньше, м.б. пара десятков, ну сотня если текст. Огород по удвоению буферов скорее замедлит чем ускорит. ZVI5. Частое Put также может тормозить изрядно, лучше набивать в памяти буфер или байтовый массив приличного размера, а затем изредка добавлять его в файл. Дайте пример кода. Хотя надежды что это поможет мало. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2012, 20:09 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Хорошо, всё..., мы поняли, поняли... Я же говорил, что скорость можно получить только хитровы.. хитрыми методами Предлагал же перейти на Форт (тот же самый PostScript)? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2012, 23:10 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Так, спокойно. Дмитрий77ZVI5. Частое Put также может тормозить изрядно, лучше набивать в памяти буфер или байтовый массив приличного размера, а затем изредка добавлять его в файл. Хотя надежды что это поможет мало. Поможет. 1) Сначала я попробовал делать Put один раз на строчку (ф-ция writeLine) 52 страницы скорость возросла до 37сек вместо 43 2) Потом попытался буферизовать страницу целиком: в SFF_writePage объявляю Dim data() As Byte при каждом вызове writeWhiteLinesToBuffer или writeLineToBuffer передаю туда data ByRef, высчитываю сколько байтов добавляю, делаю ReDim Preserve data по новому размеру и дописываю туда байты. Put делаю один раз на страницу. Код ниже: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148.
Скорость возросла до 52страницы за 32-33сек. Вопросы: 1) хорошо ли буферизовать страницу целиком как я делаю,динамически меняя размер массива ну килобайтов 200 там легко может быть. Не тормозит ли это(что целиком)? И можно ли так оставить? 2) по идее это надо делать по другому. Брать например Dim data(2048) As Byte ' the buffer и по заполнении скидывать в put. Только как это организовать? Тогда перед каждым байтом надо делать проверку на количество записанных (это в разных местах кода) и хаотически вызывать из writeWhiteLines либо writeLine. Ну, не знаю как это сделать. 3) Надо ли буферизовать SFF_writeHeader и SFF_writePageHeader или это "копейки"? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2012, 00:24 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
ZVI1. If- ElseIf - … - ElseIf -_End If в VB немного быстрее, чем Select - Case - … - End Select Не подтверждаю, попробовал, на 52 страницы 36-37 сек вместо 34сек c Case: и 33сек с массивами. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2012, 01:55 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Дмитрий772) по идее это надо делать по другому. Брать например Dim data(2048) As Byte ' the buffer и по заполнении скидывать в put. Только как это организовать? Ну поставил нежесткий ограничитель, Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
при использовании больших чисел напр. >2048 относительно буферизации целой страницы скорость несильно плавает. Пусть будет ~>2048, чего память транжирить. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2012, 02:48 |
|
Конвертер TIFF(BMP...)->SFF самому написать реально? Вопрос скорее к Бенедикту.
|
|||
---|---|---|---|
#18+
Однако, все таки внимательно надо документацию читать. CAPI 2.0 SFFNo EOL code words or fill bits are included. If the data includes EOL code words, COMMON-ISDN-API ignores these. В процессе доп. тестов выяснил: COMMON-ISDN-API может быть и ignores, т.е. файлы с EOL успешно передаются и просматриваются большинством вьюеров, входящих в комплект поставки CAPI приложений. А вот эта программа: IrfanView ...one of the most popular viewers worldwide! -она кстати единственная независимая, которую нашел и умеет работать с SFF форматом, она при добавлении EOL файлы не показывает и считает битыми. Посему про EOL пришлось убрать: Код: vbnet 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2012, 10:21 |
|
|
start [/forum/topic.php?all=1&fid=60&tid=2157584]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
48ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
74ms |
get tp. blocked users: |
2ms |
others: | 280ms |
total: | 451ms |
0 / 0 |