Вверх ↑
Этот топик читают: Гость
Ответов: 1043
Рейтинг: 33
#1: 2014-11-02 12:32:21 ЛС | профиль | цитата
В общем проблема такова.
Я открываю файл размером, например "250 Кб". Затем конвертирую Stream этих данных в HEX, а уже HEX перевожу в BIN путем замены от 0 до F двоичными данными. Затем я отрисовываю каждый бит по определенному алгоритму.
Так вот, проблема заключается в том что перебор замена и отрисовка при таком размере файла происходят ОЧЕНЬ медленно, чуть ли не катастрофически.
Как можно ускорить этот процесс? схема прилагаться

43566732project2.rar.
------------ Дoбавленo в 13.32:
Просто я с потоками не дружу) постоянно какие то глюки и лаги
карма: 0

0
файлы: 143566732project2.rar [152.1KB] [193]
Ответов: 8926
Рейтинг: 823
#2: 2014-11-02 12:57:32 ЛС | профиль | цитата
ashkalov, мудрый Tad всегда советует: на бумажке алгоритм нарисовать, а уже потом его кодировать Не идут советы впрок!
1. Зачем отрисовывать каждую точку немедлено, бедный компьютер перерисовывает картинку два миллиона раз, для этого и компонент придуман, чтобы накопить ВСЕ точки, а потом разом отрисовать.
2. Верх неприличия байты->НЕХ->BIN->строка->перебор строки! Есть же компонеты для чтения из Stream, преобразования байтов в бины!
code_34531.txt

карма: 19

0
файлы: 1code_34531.txt [3KB] [271]
Ответов: 1043
Рейтинг: 33
#3: 2014-11-02 13:33:41 ЛС | профиль | цитата
Леонид, у меня ваша схема еще дольше думает
------------ Дoбавленo в 14.27:
Леонид, а нельзя как то быстрее сделать, а то пользователям не захочется 5 минут смотреть на зависшее окно...
------------ Дoбавленo в 14.31:
Может такой возможности в hiasm и вовсе нет, а то я уже 4 день над этим бьюсь (((
------------ Дoбавленo в 14.33:
Мне надо чтобы пользователь нажал кнопку и сразу программа ему отрисовала картинку
карма: 0

0
Ответов: 1536
Рейтинг: 176
#4: 2014-11-02 14:10:20 ЛС | профиль | цитата
ashkalov писал(а):
Леонид, у меня ваша схема еще дольше думает


Тест на скорость code_34533.txt разница в 3 раза. Вероятно спасёт ситуацию IC.
карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
файлы: 1code_34533.txt [2.4KB] [195]
Ответов: 1043
Рейтинг: 33
#5: 2014-11-02 14:23:26 ЛС | профиль | цитата
ser_davkin, я говорю не о преобразовании данных, а о отрисовке ( она очень медленная)
карма: 0

0
Ответов: 1536
Рейтинг: 176
#6: 2014-11-02 14:40:34 ЛС | профиль | цитата
Сократил схему Леонид-а:
Add(MainForm,13346244,105,161)
{
Width=419
Height=567
Position=1
}
Add(Img_Point,5481312,406,252)
{
Point(X)
Point(Y)
Point(Color)
link(Bitmap,2110243:Bitmap,[(412,198)(370,198)])
link(X,8040151:reCalc,[])
link(Y,9191558:reCalc,[(426,198)(461,198)])
}
Add(MathParse,8040151,406,154)
{
MathStr="(((%1 - 1) mod 8) + (((%1 - 1) div 64) * 9 )) mod ((%2 * 8) + %2 )"
ResultType=0
Point(reCalc)
link(X1,14654006:Var2,[])
link(X2,9693364:Var2,[])
}
Add(MathParse,9191558,448,154)
{
MathStr="(((%1 - 1) div 8) mod 8) + (((%1 - 1) div (%2 * 64)) * 9)"
ResultType=0
Point(reCalc)
link(X1,14654006:Var3,[(454,96)])
link(X2,9693364:Var3,[(461,138)])
}
Add(GetDataEx,14654006,406,91)
{
link(Data,7462080:Count,[])
}
Add(VisualStrings,799117,413,105)
{
Lines=#2:16|
}
Add(GetDataEx,9693364,413,133)
{
link(Data,799117:Text,[])
}
Add(MemoryStream,14834745,203,196)
{
}
Add(Button,8113142,98,252)
{
Left=5
Top=15
link(onClick,8073899:doFor,[])
}
Add(DataToFile,6453790,203,245)
{
link(onGet,11822175:doBits,[])
link(Stream,14834745:Stream,[])
}
Add(For,8073899,147,252)
{
IncludeEnd=1
link(onEvent,6453790:doGet,[])
link(onStop,2110243:doRefresh,[(192,265)(192,160)])
link(End,14834745:Size,[(160,236)(216,236)])
}
Add(IntToBits,11822175,252,245)
{
Data_0=Integer(65342)
Data_1=Integer(0)
link(onBit1,7461145:doWork2,[])
link(onBit2,14087843:doWork2,[])
link(onBit3,11682206:doWork2,[])
link(onBit4,15595786:doWork2,[])
link(onBit5,10532631:doWork2,[])
link(onBit6,11200167:doWork2,[])
link(onBit7,6233333:doWork2,[])
link(onBit8,6233333:doWork3,[(298,300)])
}
Add(Counter,7462080,406,56)
{
Max=999999999
}
Add(Hub,5208868,322,245)
{
link(onEvent1,7462080:doNext,[(352,251)(352,62)])
link(onEvent2,5481312:doDraw,[])
}
Add(HubEx,7461145,294,245)
{
link(onEvent,5208868:doEvent1,[])
}
Add(HubEx,6233333,294,287)
{
Angle=3
link(onEvent,11200167:doWork3,[])
}
Add(HubEx,11200167,294,280)
{
Angle=3
link(onEvent,10532631:doWork3,[])
}
Add(HubEx,10532631,294,273)
{
Angle=3
link(onEvent,15595786:doWork3,[])
}
Add(HubEx,15595786,294,266)
{
Angle=3
link(onEvent,11682206:doWork3,[])
}
Add(HubEx,11682206,294,259)
{
Angle=3
link(onEvent,14087843:doWork3,[])
}
Add(HubEx,14087843,294,252)
{
Angle=3
link(onEvent,7461145:doWork3,[])
}
Add(PaintBox,2110243,364,154)
{
Left=75
Width=190
Height=530
}
карма: 1
Не так страшна ошибка, как опасность её не заметить.

0
Ответов: 1043
Рейтинг: 33
#7: 2014-11-02 14:56:49 ЛС | профиль | цитата
ser_davkin, в вашем случае теряется функционал программы
------------ Дoбавленo в 15.56:
так а быстрее заставить ее отрисовывать можно то?
карма: 0

0
Ответов: 8926
Рейтинг: 823
#8: 2014-11-02 16:01:59 ЛС | профиль | цитата
ashkalov писал(а):
..у меня ваша схема еще дольше думает..
У меня наоборот, правда всего в восемь раз быстрее
test_speed_project.jpg
карма: 19

0
файлы: 1test_speed_project.jpg [125.4KB] [481]
Гость
Ответов: 17029
Рейтинг: 0
#9: 2014-11-02 17:29:20 правка | ЛС | профиль | цитата


Редактировалось 2 раз(а), последний 2017-06-17 20:37:41
карма: 0

0
Ответов: 758
Рейтинг: 112
#10: 2014-11-03 10:52:32 ЛС | профиль | цитата
Леонид, Проверь быстродействие вот такого варианта
code_34541.txt
карма: 1

0
файлы: 1code_34541.txt [2.2KB] [177]
Ответов: 8926
Рейтинг: 823
#11: 2014-11-03 11:26:02 ЛС | профиль | цитата
miver, 14 секунд, но картинка-то не по алгоритму ТС
test_14sec.jpg
карма: 19

0
файлы: 1test_14sec.jpg [27.2KB] [384]
Ответов: 758
Рейтинг: 112
#12: 2014-11-03 16:06:35 ЛС | профиль | цитата
Леонид, Странную штуку заметил - когда у меня размер точки стоит 1, то ничего не рисуется. Я поставил 2 и у меня рисует правильно. Попробуйте размер точки поменять
карма: 1

0
Ответов: 8926
Рейтинг: 823
#13: 2014-11-03 17:03:41 ЛС | профиль | цитата
miver, всё работает:
size_1_2.jpg
карма: 19

0
файлы: 1size_1_2.jpg [8.8KB] [375]
Ответов: 1043
Рейтинг: 33
#14: 2014-11-04 19:12:56 ЛС | профиль | цитата
14 многовато 5 сек это предел) да и алгоритм мой рассчитан на то, что через каждый октет добавляется интервал размером в 1 бит
карма: 0

0
Разработчик
Ответов: 26160
Рейтинг: 2127
#15: 2014-11-06 14:10:39 ЛС | профиль | цитата
Если еще актуально, то вот реализация на IC. Используется самый быстрый из существующих в KOL методов -- ScanLine

bintobmp_002.sha
карма: 22

1
файлы: 1bintobmp_002.sha [269.9KB] [356]
Голосовали:miver
15
Сообщение
...
Прикрепленные файлы
(файлы не залиты)