Ru-Board.club
← Вернуться в раздел «Программы»

» Indigo Rose AutoPlay Media Studio

Автор: Zloy_Gelud
Дата сообщения: 19.02.2013 17:11
vazzzzz

Цитата:
и в данном случае нужно было создавать структуру в структуре

Необязательно. Можно создать структуру BITMAPINFO просто скопировав поля из структуры BITMAPINFOHEADER + добавить поле RGBQUAD.

Цитата:
UNION какой тип данных определяет?

В справке все есть.


Данный код нарисует серый квадрат:

Код: local hWnd = Application.GetWndHandle();
local hDC = tonumber(DLL.CallFunction("User32.dll", "GetDC", hWnd, DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL));
local nWidth = 100;
local nHeight = 100;

-- описание структуры BITMAPINFO
local BITMAPINFO = MemoryEx.DefineStruct{
DWORD("biSize");
INT ("biWidth");
INT ("biHeight");
WORD ("biPlanes");
WORD ("biBitCount");
DWORD("biCompression");
DWORD("biSizeImage");
INT ("biXPelsPerMeter");
INT ("biYPelsPerMeter");
DWORD("biClrUsed");
DWORD("biClrImportant");
};

-- создаем структуру
local hBITMAPINFO = BITMAPINFO:New();
-- заполняем структуру
hBITMAPINFO.biSize = MemoryEx.StructSize(BITMAPINFO);
hBITMAPINFO.biWidth = nWidth;
hBITMAPINFO.biHeight = -nHeight;
hBITMAPINFO.biPlanes = 1;
hBITMAPINFO.biBitCount = 24;
-- указатель на буфер
local pBITMAPINFO = hBITMAPINFO:GetPointer();

-- выделяем память для массива RGB
pBITS = MemoryEx.Allocate(3*(nWidth * nHeight));
-- заполняем сервым цветом (192)
MemoryEx.Fill(pBITS, MemoryEx.Size(pBITS), 192, MEMEX_BYTE);

local sRes = DLL.CallFunction("gdi32.dll", "SetDIBitsToDevice", hDC..", 10, 10, "..nWidth..", "..nHeight..", 0, 0, 0, "..nHeight..", "..pBITS..", "..pBITMAPINFO..", 0", DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL)

MemoryEx.Free(pBITS);
hBITMAPINFO:Free();

Dialog.Message("Debug", sRes, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
Автор: vazzzzz
Дата сообщения: 19.02.2013 20:33
Zloy_Gelud

благодарю за пример, теперь хоть нашел свои ошибки - основная была в том, что я неправильно понял суть использовании "нужных" элементов в структуре - оказывается объявлять нужно все элементы, а вот присваивать значения можно не всем (а я объявлял не все).

Попытался заполнять "кадры" средствами AMS, но что-то как-то все оч медленно происходит, даже простая связка выполняется СЕКУНДЫ:


Код:
--байт на пиксель теперь по 4 сделал (biBitCount = 32)
bycnt = 0;
MemoryEx.Zero(dBHandle, MemoryEx.Size(dBHandle));
for cnt1 = 1, dWidth * dHeight do
MemoryEx.DWORD(dBHandle + bycnt, Math.RGBToNumber(0, 0, 0));
bycnt = bycnt + 4;
end
Автор: Zloy_Gelud
Дата сообщения: 19.02.2013 20:46
vazzzzz -- мне вообще кажется, что ты все на своей волне городишь.
Автор: vazzzzz
Дата сообщения: 19.02.2013 21:06
Zloy_Gelud

В каком смысле?) Пытаюсь вникнуть просто.. Пытаюсь задавать вопросы и надеюсь на ответы умных людей, а то мозга у меня походу не хватает. Почему на своей волне? Мне оч нужна помощь! Хотя бы понять реальные возможности AMS и хватит ли их для реализации моей задачи. Я что-то упустил на чем ты акцентировал внимание? Если так, то я не специально, серьезно.
Автор: Zloy_Gelud
Дата сообщения: 20.02.2013 09:51
vazzzzz

Цитата:
хватит ли их для реализации моей задачи.

Если окажется, что хватит, то ты перед этим взорвешь себе мозг, а может и еще кому.

Цитата:
Хотя отлавливать такие сообщения как WM_PAINT похоже только так получится

MemoryEx позволяет хучить WM_ сообщения (Subclass.Create).
К тому же битмап заполняется вроде как BGR цветом, а не RGB.

Код: for i = 1, 3*(nWidth * nHeight), 3 do
MemoryEx.DWORD(pBITS + (i - 1), 0); --blue
MemoryEx.DWORD(pBITS + i, 192); --green
MemoryEx.DWORD(pBITS + (i + 1), 255); --red

end
Автор: Zloy_Gelud
Дата сообщения: 20.02.2013 12:31
PS. Можно еще так заполнить таблицу цветов.
Добавить функцию:

Код: BGR2RGB = function (nColor)
return Bitwise.Or(Bitwise.And(nColor, 0x00FF00), Bitwise.ASL(Bitwise.And(nColor, 0x0000FF), 16), Bitwise.ASR(Bitwise.And(nColor, 0xFF0000), 16));
end
Автор: vazzzzz
Дата сообщения: 20.02.2013 14:51
Zloy_Gelud

Я в восторге от тебя, спасибо!!!))


Цитата:
Добавить в конец кода


на енто у меня мозга хватило) не все так плохо у меня))


Цитата:
Можно еще так заполнить таблицу цветов


щас буду копаться, благодарю за варианты, а то у меня реально долго массив из width*height*4b заполняется, я прям в ams разочаровался.. надеюсь это разочарование временное и я что-то не так делаю.. хотя я понимаю, что массив который я занимаю под rgb с помощью memoryex это массив из DWORD в физической памяти, а массив который я формирую при расчете в ams это массив значений совсем не по 4 байта каждый на каждый элемент.. В это наверное дело? Отсюда и медленное заполнение массива прежде чем он уляжется в область, зарезервированную под rgb..


Цитата:
ты перед этим взорвешь себе мозг


ты прав, я у memoryex уже нарыл функцию вставки фрагментов flat asm.. а с ним у меня дела вроде получше чем с Си (правда я не под виндовс пишу, а под 51, avr, msp и arm начал недавно грызть). Но пока не тороплюсь в эту сторону, потому как ассемблер ассемблером, а чтоб на нем писать я думаю все равно придется влезть в дебри высокого уровня (ну хотя бы для того, чтоб себе кусок памяти под выполняемый фрагмент как-то урвать.. вобщем боюсь как бы я еще больше себе жизнь не усложнил).


Цитата:
а может и еще кому


ахахаха! Кто бы это мог быть *интригующе и слегка зловеще*

Добавлено:
Вот скажи мне как на духу - чему у тебя разница (t2 - t1) равна. У меня 3,5 (три с половиной) секунды. И как с этим жить то дальше?))

Добавлено: вопрос некорректный, поэтому доп.инфо - разрешение 800х600х32b


Код:
--
Dialog.Message("Start!", "Go go go!", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
--точка отсчета (t1)
--
for i = 1, 4 * (dWidth * dHeight), 4 do
MemoryEx.DWORD(dBHandle + (i - 1), BGR2RGB(Math.HexColorToNumber("ffc0c0")));
end
--
--точка завершения (t2)
Dialog.Message("Stop!", "Finish! Uh-h-h..", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
--
Автор: Zloy_Gelud
Дата сообщения: 20.02.2013 17:54
vazzzzz
Мда, 800х600 отрисовывает долго:
Сделал 3 прохода.

32 бита:
1) 2796 мс
2) 2890 мс
3) 2765 мс

24 бита отрисовывает приблизительно столько же.
Автор: vazzzzz
Дата сообщения: 20.02.2013 18:12
Zloy_Gelud

Вот и я о том же.. Тут хоть в 10 раз найди способ ускорить - не поможет.. Да даже в х100 не поможет, учитывая то, что перед формированием/выводом кадра нужно просчитать значение каждого пиксела по довольно увесистому алгоритму...... печально. Хотя я где-то на форумах читал, что при использовании SetDIBitsToDevice, не напрягаясь, можно выводить неплохой цвет с вполне себе хорошим разрешением 150 кадров в секунду (учитывая "моргание" дисплея 100Гц + время на вычисление и подготовку кадра этого впринципе должно хватить с небольшим запасом). Проверить это средствами ams похоже не получится, ну разве что с memoryex и написанием процедур формирования и вывода кадра на asm. Походу выход один - писать библиотеку в VB, которая будет и увесистые алгоритмы вычислять и графику выводить. Логично? Скажи как специалист (а не для того, чтобы я мозги никому не взрывал).

Добавлено:
И чисто для интереса - а почему AMS так тормозит? Дело в движке? Или в том, что использует в основном переменные типа variant с резервированием под них большого кол-ва памяти? Вопрос исключительно для расширения кругозора
Автор: Zloy_Gelud
Дата сообщения: 20.02.2013 20:47

Цитата:
И чисто для интереса - а почему AMS так тормозит? Дело в движке?

Да, дело в движке. LUA (движок AMS) увы слишком долго обрабатывает цикл из 1.440.000 элементов (4 * 800 * 600). Здесь уже нечего не поделаешь. Или же писать на либу на другом ЯПе...
Автор: vazzzzz
Дата сообщения: 20.02.2013 20:55
Zloy_Gelud

Эх.. ну тогда больше не буду мозги тебе взрывать) блин, если б не мое маниакальное желание все сделать самому - купил бы движок графический у умных людей и юзал бы его через ams, тем более что задача с обработкой графики не серийного характера, пока еще вообще - чисто для себя попробовать. В любом случае спасибо тебе за кучу полезной для кругозора информации, по-любому еще пригодится пусть и применительно не к конкретно этой задаче!
Автор: tavria2
Дата сообщения: 20.02.2013 21:07
vazzzzz

Цитата:
И чисто для интереса - а почему AMS так тормозит?

Основные тормоза возникают в "lua-прокладке" между AMS и плагином.

В свое время, известный разработчик плагинов (reteset) - потерпел фиаско с плагином "Scintilla", указав на проблему связанную с быстродействием, из-за чего плагин оказался нестабильным и разработчик отказался от его дальнейшего сопровождения.

P.S. Для повышения быстродействия, нужно стараться сократить кол-во обращений к функциям плагина (оптимизировать код, если это возможно).
Автор: vazzzzz
Дата сообщения: 20.02.2013 21:22
tavria2

Здравствуйте! Я очень рад с вами общаться) Потому как подозреваю, что вы спасли одно из моих творений, в котором я задействовал ваш спасительный для меня плагин SmtpT. Вы его автор, я прав? Мне его посоветовал на форуме indigorose один русскоязычный товарищ, может ваш знакомый - этого утверждать точно не могу. Отличный плагин, решил все мои конфликты с обычным SMTP плагином от amsplugins (были лишние пробелы в заголовках писем, не было доп.таймаута ожидания ответа сервера и что мне особенно понравилось - это выбор кодировки).


Цитата:
Основные тормоза возникают в "lua-прокладке"


тут с вами не соглашусь. Как раз таки включение обращений к плагину в цикл формирования rgb позволяет в моем случае сократить общее время выполнения цикла. А вот если я сначала в цикле буду создавать обычный массив (без плагина), то полное выполнение цикла отнимает еще больше времени.

Добавлено:

Цитата:
оптимизировать код


Врядли тут можно оптимизировать алгоритмы так, чтоб ускориться раз так в 300-400 если я не прав - то я буду только рад этому (честно).
Автор: Octanium
Дата сообщения: 20.02.2013 21:45
Спрошу еще раз, можно-ли в АМС создавать интернет подключения? (PPPoE с параметрами естественно).
Автор: tavria2
Дата сообщения: 20.02.2013 21:55
vazzzzz

Цитата:
Вы его автор, я прав?
Да. Я рад, что он вам помог.

Цитата:
тут с вами не соглашусь. Как раз таки включение обращений к плагину в цикл формирования rgb позволяет в моем случае сократить общее время выполнения цикла. А вот если я сначала в цикле буду создавать обычный массив (без плагина), то полное выполнение цикла отнимает еще больше времени.

Соглашаться или нет, это ваше дело. Сейчас у меня нет времени на разбор полетов, как вы там создаете, обрабатываете, передаете массив...
Я могу сказать следующее, если создать таблицу(массив) и заполнить ее в цикле на стороне AMS, а затем передать ее в плагин для дальнейшей обработки - будет быстрее, чем в цикле передавать по одному элементу таблицы в плагин и разница в скорости обработки будет очень большой.
Автор: vazzzzz
Дата сообщения: 20.02.2013 22:07
tavria2


Цитата:
Сейчас у меня нет времени на разбор полетов


Это была не провокация вас к разбору полетов
(в моем случае это скорее не полет - на пузе пока ползаю вокруг задачи своей)

*sorry за офф-топ (я правильно употребил это выражение? если что не казните, я к своду правил общения на форумах еще не успел принаравиться)
Автор: Zloy_Gelud
Дата сообщения: 21.02.2013 08:10
ПереписАл функу конвертирования RGB в BGR без использования плагина:

Код: RGB2BGR = function (...)
if (#arg == 3) then -- RGB color
return (arg[3] * 65536 + arg[2] * 256 + arg[1]);
else -- HEX color
local nRed, nGreen, nBlue
nRed = arg[1] % 256;
nGreen = ((arg[1] - nRed) % 65536) / 256;
nBlue = Math.Round((arg[1] - nGreen) / 65536, 0);
return (nBlue * 65536 + nGreen * 256 + nRed);
end
return 0;
end
Автор: vazzzzz
Дата сообщения: 21.02.2013 10:06

Цитата:
один хрен все печально


)) точнее и не скажешь)

Добавлено: начал рыть в сторону движка SR2D (автор Mikle)
Автор: Zloy_Gelud
Дата сообщения: 21.02.2013 16:40
vazzzzz
Лучше рой в сторону плагина Canvas.
Автор: RadioKoTFM
Дата сообщения: 22.02.2013 04:19
Прива всем! Не давно нашёл эту прогу. Сразу по ней видно что возможности глобальные! Прога супер!
Но подскажите юзеру такую хрень:
Есть такой проект:
Есть софт, есть прога.
Надо что б по нажатию на проект прога предлагала выбрать из списка проги (отмечать их надо будет с помощью Checkbox, с обязательной возможностью выбора нескольких)
И после нажатия на самую последнюю кнопку xBootom или подобной шёл последовательный процесс установки выбранных програм и т.д. а не выбранные само сабой что б не устанавливало. Причём что б устанавливало из других EXE, без участия пользователя (т.е что б пользователю на каждой проге не надо было нажимать "Далее" "Согласен" и т.д
Я уже весь рунет облазил и никуя не нашёл, даже приблизительно. Распишите если не лень что где прописывать... а конкретно, не могу связать эти два вида кнопок. В остальном, мне всё предельно понятно)
Заранее премного благодарен...
Автор: nikitorol
Дата сообщения: 22.02.2013 08:55
Ребят. Подскажите пожалуйста как заставить прогресс бар принимать данные и выдавать их на него.
Пример Я Скачиваю файл как мне выдать прогресс на бар?
Подскажите пожалуйста буду очень благодарен.
Автор: AKKUMIS
Дата сообщения: 22.02.2013 19:08
привет всем! Хотела спросить, как делать чтоб когда я пишу в Input на label выходила какое нибудь сообщения, то есть как сравнить текст в Инпуте. как будет условие?

Добавлено:
Как можно подчитать количество какого нибудь слова, например 'да', а они находяться в Page1, Page2, Page3. Мне нужна ответ - 3.
как будеть код?
Автор: vazzzzz
Дата сообщения: 23.02.2013 18:38
Zloy_Gelud


Цитата:
Лучше рой в сторону плагина Canvas


Толком не смотрел что это такое, но судя по всему отвечает исключительно за прорисовку (сколько там кадров в секунду можно выжать не знаю). Он же не может еще и вычислять с приемлемой скоростью до того как кадр вывести, тем более я не нашел самого плагина чтоб хоть пощупать. Кстати, по пововоду движка SR2D - оказывается есть и SR3D и это как раз примерно то, что мне нужно, по-моему даж исходники есть где-то в сети. Смотри чего чертяка творит - _http://tuapse-mikle.narod.ru/sr3d2.zip (70кБ, там демо-файл *.exe запусти). У меня та же задача, только мне тени, освещение, водная поверхность, палитра и пр.усложения не нужны - контурно все нужно отрисовывать (грубо говоря - например квартиру с мебелью, ну или пром.объект какой-нить). Если даж исходников не найду попробую юзать dll. Правда у меня с этими классами, структурами и прочей аттрибутикой объектного программирования не оч все хорошо. Но ничо, жизнь прижмет и не такое освоишь))
Автор: Ostap_de_Brasil
Дата сообщения: 24.02.2013 19:21
Надо сделать диск для обычного двд плейера который подключается к телевизору.
На диск будет записана музыка. Эту музыку надо,чтобы сопровождали меняющиеся картинки и при проигрывании музыки и при прказе картпнок надо чтобы показывалось название трека на экране.
Этой программой можно это сделать и как это просто ?
Или надо через колено ?
Автор: blaze96
Дата сообщения: 25.02.2013 19:35
Доброго времени суток, помогите решить проблему. Уже сил нет просто юзать самостоятельно! Ситуация такая, есть выпадающий список, цель при выборе определенного пункта в этом списке должно запускаться конкретное видео, в стандартном плэере, соответствующее этому пункту в КомбоБокс. Если вы мне поможете я буду примного благодарен!) Рассмотрите мой вопрос, плиз)
Автор: Zloy_Gelud
Дата сообщения: 25.02.2013 23:44
RadioKoTFM -- зачем тебе для этого AMS? Смотри в сторону WPI.
nikitorol -- читай в справке описание параметра CallbackFunction в действии HTTP.Download
Ostap_de_Brasil -- DVD-плееры научились читать EXE-файлы? Может я отстал от жизнии..

blaze96 -- попробуй:

On Select объекта ComboBox:

Код: local sPath = ComboBox.GetItemData(this, e_Selection);
File.Open(sPath, "", SW_SHOWNORMAL);
Автор: Ostap_de_Brasil
Дата сообщения: 26.02.2013 06:28
Zloy_Gelud

я потому и спрашиваю,что не знаю что делает эта прога.
Если на выходе екзешник - тогда буду мучить про шоу ....
Автор: blaze96
Дата сообщения: 26.02.2013 14:17
Zloy_Gelud
Почему то не получается, для каждого пункта из списка у меня выходит одно и тоже видео "magnolia...". Пробовал как то редактировать ваш код, то же ни к чему ни привело. Предположил что вместо атрибута File.Open надо вставить Video.Load что так же не привело к преследуемой цели. Может я что то не так прописал? В чем может быть проблема, и как мне найти решение к ней... Можешь ещё не много покалибаться со списками и видео. Чтоб на каждый пункт списка было свое видео в стандартном Автопэевском плэере?????
Верю, жду, надеюсь, пойду дальше пока что искать иголку в стоге сена...
Автор: Zloy_Gelud
Дата сообщения: 26.02.2013 17:53
blaze96 -- покажи как ты заполняешь ComboBox.
Автор: PAVELNEXT
Дата сообщения: 26.02.2013 20:36
Здравствуйте, помогите приз понять проблему, не корректно запускается проект

подробности: запускаю проект идёт полоса прогресс бара и тишина окно проекта не появляется, заходу в диспетчер задач - процесс autorun.exe есть, но ни в панели задач ни в трее проекта нет, как быть подскажите, уже перепробовал всё и от имени админа и права менял, антивирус не блокирует 100%.

P.s на другом компе всё нормально

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980

Предыдущая тема: память не может быть written


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.