Page 31 of 77

Re: Помогите новичку

Posted: Sat Apr 28, 2012 11:04 pm
by Mario
Ага, и человеку придется изучать еще больше премудростей. Впрочем каждый набивает свои шишки - лично я убунту не использую совсем.

Re: Помогите новичку

Posted: Sat Apr 28, 2012 11:20 pm
by Scampada
Да я люблю и премудрости изучать, и шишки набивать. Убунту получил "в наследство", с тех пор ею и пользуюсь, ибо привык. Даже не в курсе, в чем ее отличие от Debian, к примеру. :) Просто не разбирался. Для десктопа подходит, главное - вирусня с флешек из внешнего мира не лезет и легко убивается ручками. А глубже я пока не копал. :mrgreen:

Re: Помогите новичку

Posted: Sun Apr 29, 2012 8:48 pm
by Scampada
Еще вопрос. Есть среди системных функция типа delay? Чтобы выполнять последовательность каких-то команд с задержкой. Нужно обрабатывать массив, попутно визуализируя это на экране таким образом, чтобы пользователь визуально видел процесс обработки, а не получал готовый результат, возможно, не имея понятия, каким образом он получился.
Вопрос нубский, может, что-то такое есть даже не в системных командах. :)

Re: Помогите новичку

Posted: Sun Apr 29, 2012 9:08 pm
by Mario
Функция 51. Один поток делает и оставляет отметки, второй отображает. Оба имеют доступ к одному адресному пространству.

Re: Помогите новичку

Posted: Sun Apr 29, 2012 9:08 pm
by Serge
ф.5
eax = 5 - номер функции
ebx = время в сотых долях секунды

Re: Помогите новичку

Posted: Sun Apr 29, 2012 9:10 pm
by Mario
Serge
Насколько я понял человеку нужна не просто задержка, а именно параллельная обработка и отображение.

Re: Помогите новичку

Posted: Sun Apr 29, 2012 9:29 pm
by Scampada
Mario,
Спс, но сойдет и так. Размер матрицы, которую нужно обрабатывать, небольшой - от 5 до 10 ячеек.
Нужно просто сделаать несколько циклов, во время которых распределить определенным образом содержимое ячеек по матрице (числа). Привести матрицу в устойчивое положение, когда изменять значения ячеек будет не нужно. И даже лучше, если будет одной функцией (потоком) и обрабатываться, и отображаться. Из соображений наглядности. Либо затормаживать оба потока... В данном случае в этом просто нет необходимости, задача простенькая. :)
http://scampada.blogspot.com/

Спасибо всем ответившим.

ЗЫ Хотя насчет двух потоков я подумаю, возможно, так будет оптимальнее.

Дело двигается понемногу :)
Spoiler:Image

Re: Помогите новичку

Posted: Mon Apr 30, 2012 11:41 pm
by Scampada
Нарыл в интернете алгоритм для генерации случайных чисел.

Code: Select all

;xorshift a,b,c,d
;generate random 32-bit number based on seeds a,b,c and d
;returns new seeds a,b,c,d in eax,ebx,ecx,edx respectively
;edx is usable as random result
;proc    xorshift,.a,.b,.c,.d
xorshift:
	.a	equ esp+4
	.b	equ esp+8
	.c	equ esp+12
	.d	equ esp+16
	mov	eax,[esp+4]
	shl	eax,15
	xor	eax,[esp+4]
	mov	edx,[esp+16]
	shr	edx,21
	xor	edx,[esp+16]
	mov	ebx,eax
	shr	eax,4
	mov	ecx,[esp+16]
	xor	eax,ebx
	mov	ebx,[esp+12]
	xor	edx,eax
	mov	eax,[esp+8]
	ret	16
Можно ли ему доверять или в среде КоОС есть более "общепринятый" алгоритм? И что-то я не пойму, зачем цифра 16 после ret. :roll: Возвращать в любом случае должен 32 бит...

Re: Помогите новичку

Posted: Mon Apr 30, 2012 11:56 pm
by Mario
В Колибри нет стандартного генератора псевдослучайных чисел.

ret 16 - увеличивает указатель стека (содержимое регистра ESP) на 16 байт, а потом берет значение для возврата к вызвавшему его коду.
В приведенном примере четыре значения, размером в dword, передаются процедуре через стек. Значения заносятся перед вызовом процедуры.

Re: Помогите новичку

Posted: Tue May 01, 2012 5:17 pm
by Nable
> ret 16 - увеличивает указатель стека (содержимое регистра ESP) на 16 байт, а потом берет значение для возврата к вызвавшему его коду.
Разве не наоборот? Сначала выталкивает значение, а потом увеличивает указатель стека на это число байт.

Re: Помогите новичку

Posted: Tue May 01, 2012 5:45 pm
by Mario
А да, точно, чет я тормознул. :?

Re: Помогите новичку

Posted: Tue May 22, 2012 10:46 pm
by 0CodErr
По поводу перерисовки окна:
Можно ли перерисовывать не всё окно, а лишь некоторую часть?
Например, при активации\деактивации окна надо перерисовать только заголовок и границы,
а клиентскую часть не всегда нужно.

Насчёт libimg:
Я только в Wiki нашёл один пример, но многое ещё не понятно.
Нет ли где подробного описания?

Моя программа пока работает только с bmp 24 bpp. Она открывает файл с изображением,
далее можно применить к нему выбранный фильтр(или несколько фильтров),
а затем уже обработанное изображение можно сохранить в файл.

Я бы хотел иметь возможность работать с форматами изображений, поддерживаемыми libimg.
Тогда программа могла бы работать даже просто как конвертер.

Некоторые скриншоты этой программы:
ImageImage
ImageImageImageImage
ImageImageImageImage

Re: Помогите новичку

Posted: Tue May 22, 2012 11:30 pm
by Mario
0CodErr wrote:По поводу перерисовки окна:
Можно ли перерисовывать не всё окно, а лишь некоторую часть?
Например, при активации\деактивации окна надо перерисовать только заголовок и границы,
а клиентскую часть не всегда нужно.
Нет гарантии, что поверх окна не было выведено другого окна. Потому потере/возврате фокуса окну его нужно перерисовывать полностью.
Однако с целью уменьшения эффекта "моргания" можно не выводить фон окна установив флаг:

Code: Select all

C = 1 - не закрашивать рабочую область при отрисовке окна

смотреть описание функции 0 в документации.
Рабочую же область заполнять самостоятельно. Т.е. там где раньше рисовался фон придется самостоятельно зарисовывать прямоугольные области функцией 13.

По поводу libimg ничего не скажу, потому что не пользовался. Мои программы zSea и OpenDialog, а также доработанный мной Icon используют альтернативные плагины. Один формат - один плагин.

libimg поддерживает на сегодня больше форматов, чем у меня есть плагинов и применение в вышеприведенной программе именно libimg пожалуй более оправдано.

Могу лишь посоветовать посмотреть исходники KIV.

Re: Помогите новичку

Posted: Wed May 23, 2012 11:33 am
by IgorA
0CodErr wrote:Я только в Wiki нашёл один пример, но многое ещё не понятно.Нет ли где подробного описания?
Обновил тег с кодом в этой странице, после изменений на вики тэг asm стал писатся по другому и все слипалось в сплошной кусок текста.
Более понятного объяснения нет, потому что автор библиотеки покинул проэкт, на странице записано все что я успел узнать.
0CodErr wrote:Она открывает файл с изображением,далее можно применить к нему выбранный фильтр(или несколько фильтров), а затем уже обработанное изображение можно сохранить в файл.
На сколько я знаю libimg только раскодирует изображения из разных форматов в RBG, насчет обратной перекодировки точно не знаю есть ли она там. Потому возможен вариант, что открывать можно будет разные форматы а сохранять все преобразованные изображения в bmp.

Re: Помогите новичку

Posted: Wed May 23, 2012 2:05 pm
by dunkaist
0CodErr wrote:Я только в Wiki нашёл один пример, но многое ещё не понятно.
Ещё есть пример совместного использования libio и libimg. Я буквально в ревизии 2405 привёл его в рабочее состояние. Думаю, это именно то, что тебе нужно.
0CodErr wrote:Нет ли где подробного описания?
Пока нет. Статья ещё не готова. Ты можешь написать мне в джаббер (указан в профиле) или ЛС, а также спросить в соответствующей теме. Всё-таки совсем без разработчиков libimg не осталась.
0CodErr wrote:Моя программа пока работает только с bmp 24 bpp. Она открывает файл с изображением,
далее можно применить к нему выбранный фильтр(или несколько фильтров),
а затем уже обработанное изображение можно сохранить в файл.
С открытием и декодированием libimg поможет. Можно также встроенными функциями преобразовать изображение в RGB форму. Для этого есть схожие функции do_rgb, to_rgb, to_rgb2.

Кодирования на данный момент нет никакого. Обещать сейчас ничего не буду. Функции кодирования все как одна делают

Code: Select all

xor     eax, eax
ret
0CodErr wrote:Я бы хотел иметь возможность работать с форматами изображений, поддерживаемыми libimg.
Тогда программа могла бы работать даже просто как конвертер.
Как я уже написал, дело может встать только за кодированием. Разберись пока с общей логикой работы libimg, а там посмотрим. Чем чёрт не шутит.

Если это не курсовая, которую нужно сдать и забыть, думаю, имеет смысл создать отдельную тему.