|
|
  |
Разработка findcolor, findimage, Pure lua |
|
|
sutra |
9.4.2021, 10:44
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
Цитата Я переворачивал построчно через memcpy. Спасибо. Да, именно так. Благо меня этому уже научили. Просто при загрузке файла смотрю высоту и если минус, построчно копирую снизу вверх. Тут тоже вроде всё решил, как и говорил, создал уже массив этих масок с большим запасом, так что манипулировать ими нет проблем. При записи не знаю пока, можно тоже построчно копировать в обратном порядке, чтобы не быть белой вороной. Скорость копирования в памяти - это крохи, тут нет никаких проблем, кроме эстетической - противно смотреть на собственный код.
|
|
|
|
sutra |
9.4.2021, 12:58
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
Цитата sutra, принципиально делаем две версии одинаковые?) Нет, Дарк, не в этом дело. Просто я люблю всё попробовать сделать сам, чтобы чётко понимать что и как работает, так сказать для опыта. Мои потуги нисколько не умаляют твой вклад в общее дело. Ну и в конце концов, ты же всё это делаешь не только для меня, хоть я тут намутил больше всех. Во-вторых, ну бывает просто не терпится поскорее решить проблему, а не ждать милостыню, да и кто знает, а вдруг тебе будет некогда ... Ну и наконец, я максималист, если у меня есть ощущение, что можно что-то ускорить - я это делаю. Я вообще любитель низкого уровня, мне как-то это ближе, ну кроме ASM-а конечно, хотя были времена, когда и без него ну никак было не обойтись. Когда рисовал обработку графики (ещё для CGA), там прирост по сравнению с Паскалем был очень солидный. Я же не зря спросил про копирование - это же основа работы с массивами данных. Теперь я знаю как это тут делать, так что всё в полном ажуре. Ещё раз спасибо и тебе и всем кто не был безучастен!
|
|
|
|
sutra |
9.4.2021, 13:17
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
Дело всё ещё в том, что я совершенно не понимаю принципы работы lua. Что и чего там делается я не знаю. Изучать всё это - мне жаль убивать своё время, я далеко не молод. Тупо ориентируюсь на готовые решения (примеры) и на интуицию. Вот пример. rmem - это что? Я не знаю. Это аббревиатура доступа к данным? или полноценная функция? Если функция (о чём я интуитивно подозреваю), тогда это однозначные тормоза, т.к. уже задействуется память, т.к. используется стек, хотя х.з. как сейчас всё реализуется, может всё уже распёхано по памяти. Раньше я чётко понимал ... передал в функцию параметр как var - передал адрес, без него - будет создана новая переменная, почему и было глупо передавать массивы как параметр, а не как переменную. Почему и используется буфер (даже понятие придумано конкретное) при передаче массивов данных ... Ну в общем ты меня понял, примерно так.
|
|
|
|
DarkMaster |
9.4.2021, 13:24
|
          
Модератор UOPilot
Сообщений: 9.735
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29623
Пользователь №: 11.279

|
Цитата rmem - это что? Я не знаю. Это аббревиатура доступа к данным? или полноценная функция? Это сишный cast. Цитата ну кроме ASM-а конечно В луа можно делать вставки на аме (IMG: style_emoticons/default/crazy.gif) Не знаешь луа, но знаешь асм?) Пиши на асме - уже в продаже доступно.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
sutra |
9.4.2021, 13:42
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
Цитата Это сишный cast. (IMG: style_emoticons/default/biggrin.gif) И даже это требует для меня перевода. Ты думаешь я что-нить понял? СИ я тоже не изучал - дурак был, да и не было возможности, пришлось принципиально менять направление деятельности, я начал свой трудовой путь в августе 91 года, надеюсь не надо объяснять, что тогда творилось в стране. Пришлось всё бросить и надеть погоны. Да и ASM я напрочь забыл, да и знал то немного. Конкретный вопрос. rmem тормозит или нет? Мне показалось что тормозит. Именно поэтому я и делал функцию ImageToArray. Сейчас есть прямой доступ к битовой маске, вот поэтому и спрашиваю, есть ли смысл использовать rmem. А вообще не тратьте на меня своё время, для меня всё это теперь просто хобби, забава. Мой поезд давно на запасном пути. Не сдохнуть бы и то хорошо. (IMG: style_emoticons/default/biggrin.gif)
|
|
|
|
DarkMaster |
9.4.2021, 15:49
|
          
Модератор UOPilot
Сообщений: 9.735
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29623
Пользователь №: 11.279

|
Цитата И даже это требует для меня перевода. Это функция си, которая преобразует один тип данных в другой. Зачастую используется чтобы компилятор отстал со своими претензиями, что ты подсовываешь какой-то сраный int вместо MicrosoftSuperReanamed5or6TimesDataTypeForLookSoCool, который на самом деле все тот же int. Если совсем по деревянному: a=int b=a c=b d=c -- а вот тут тебя копилятор пошел нахрен ибо -- функция ждет на входе тип данных d. -- и пофиг, что оно все друг другу равно. result = cool_func(int) -- а если ты сделаешь result = cool_func(cast"d" int) -- то оно заткнется и сожрет. -- и вот за этот бред мне очень хочется убивать. -- причем зачастую нативно не понятно, что ему надо -- на входе. int/unsigned int/word/long long или еще чего. Цитата Конкретный вопрос. rmem тормозит или нет? Да, тормозит. Насколько? А кто бы знал. Я очень сильно подозреваю, что это его вина в проблемах финдимиджа. По поводу malloc и приколов garbage collector, который хвостиком махнул и снес все к хренам. Если произошло преобразование cdata pointer -> number -> cdata pointer, то для него уже связь потеряна, можно сносить. В остальном шуршит.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
sutra |
9.4.2021, 16:12
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
Цитата Это функция си Ну вот видишь, "предчуствия меня не обманули". (IMG: style_emoticons/default/biggrin.gif) Цитата функция ждет на входе тип данных d Вот именно это мне и не нравится. Я понимаю, хотели сделать всё для дурачка, а в итоге, как обычно мучаются специалисты. Меня лично просто бесит, когда вместо меня начинают думать. Если я сказал byte - значит байт, и не надо за меня решать. Извини, привычка думать по Паскалевски. Примерно я всё понял, нужен тотальный контроль типов данных. А ещё меня раздражает, что всё так сильно перемешано по типам. Лично для меня существуют лишь следующие типы: 1 байт; 2; 4; 8; 16; 32 и 64. А как я их буду интерпретировать, не их собачье дело. В идеале доступ к нетипизированным данным, что собственно мы и делаем, объявляя массивчик для битовой маски. Есть доступ к любому байту, а уж что-то умножить или разделить на 256 мы всегда сумеем сами. Кстати, мне очень помогают твои скрипты, я на них учусь, я только на днях узнал (изучая твои поделки), что можно просто использовать %, чтобы получить целое от деления, вместо бесящих меня math.
|
|
|
|
DarkMaster |
9.4.2021, 16:17
|
          
Модератор UOPilot
Сообщений: 9.735
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29623
Пользователь №: 11.279

|
Цитата А ещё меня раздражает, что всё так сильно перемешано по типам. Лично для меня существуют лишь следующие типы: 1 байт; 2; 4; 8; 16; 32 и 64. А как я их буду интерпретировать, не их собачье дело.
Ну целые со знаком/целые без знака/с плавающей точкой имхо адекватное решение. Ну тупо чтобы +-*/ и прочая математика не дурела и каждый раз не писать велосипед. У меня когда был подход лет 10 назад к си, так у меня самыми используемыми были memcpy, там где надо и не надо и pragma pack, чтобы он выравнивать перестал и можно было спокойно с памятью работать. У сишников была кровь из глаз(и я согласен с этим) и вопросы "а оно реально работает?")) Цитата что можно просто использовать %, чтобы получить целое от деления, вместо бесящих меня math. Но не нужно. Тормозной он. Я всегда стараюсь избегать, но тут мне было так лень, да и там всего одна операция. Деление кстати еще тормозное. Лучше заменять умножением, если это возможно.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
sutra |
9.4.2021, 16:38
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
Цитата Ну целые со знаком/целые без знака/с плавающей точкой имхо адекватное решение Ну конечно, это уж я так. Хотя мне ничего не мешает в нужный момент интерпретировать так, как я хочу. Ну вот есть у меня минусовое. Когда я это пишу в файл - глубоко фиолетово что там имелось ввиду - запишется конкретная комбинация из 8 битов. Грубо говоря всегда должна быть возможность работы с буфером. Понятно, что она есть, но в lua это всё так хитро накручено, что мне с моими 3 классами приходится туго. Вот хоть верь, хоть не верь. До сих пор работаю даже на битовом уровне. Как уже говорил, у меня всё работает по сценариям, которые прописаны в обычных текстовых файлах. Мне нужно задать кучу параметров по принципу ДА-НЕТ. Тащить массив очень неудобно, а кинуть число, в котором зашиты все эти да и нет очень удобно. Точнее, текстовый файл - это и есть массив, в котором каждое число тоже массив, только битовый - очень удобно для читабельности таких файлов. Цитата Но не нужно. Тормозной он Странно, вопрос, а чем же так тогда принципиально быстр math.modf ?
|
|
|
|
Cockney |
9.4.2021, 17:30
|
       
Master
Сообщений: 1.403
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 22551
Пользователь №: 16.156

|
Цитата(DarkMaster @ 9.4.2021, 15:49)  Это функция си, которая преобразует один тип данных в другой. Зачастую используется чтобы компилятор отстал со своими претензиями, что ты подсовываешь какой-то сраный int вместо MicrosoftSuperReanamed5or6TimesDataTypeForLookSoCool, который на самом деле все тот же int. Если совсем по деревянному: a=int b=a c=b d=c -- а вот тут тебя копилятор пошел нахрен ибо -- функция ждет на входе тип данных d. -- и пофиг, что оно все друг другу равно. result = cool_func(int) -- а если ты сделаешь result = cool_func(cast"d" int) -- то оно заткнется и сожрет. -- и вот за этот бред мне очень хочется убивать. -- причем зачастую нативно не понятно, что ему надо -- на входе. int/unsigned int/word/long long или еще чего.
Это не бред. Это очень хорошие пинки компилятора(а он умнее, можно не спорить, это факт) глупому человеку. Каст явно режет точность числа, например double a = 2.0 не равно int b = 2 по определению представления дробных чисел. И передав 2.0 в функцию, которой нужен int. Вы уверены что хотите потерять дробную часть ? Компилятор и говорит об этом. И так со знаковыми типами. Компилятор все проверяет. И это хорошо. Если это вызывает ужас, то я думаю после знакомства с rust можно получить инфаркт. Цитата(sutra @ 9.4.2021, 16:12)  А ещё меня раздражает, что всё так сильно перемешано по типам. Лично для меня существуют лишь следующие типы: 1 байт; 2; 4; 8; 16; 32 и 64. А как я их буду интерпретировать, не их собачье дело.
Эта идеология умерла минимум 30 лет назад. И это хорошо.
|
|
|
|
DarkMaster |
9.4.2021, 17:47
|
          
Модератор UOPilot
Сообщений: 9.735
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29623
Пользователь №: 11.279

|
Добавлен loadimage, image_mirror_v(по вретикали переворачивает), image_copy. Опять переработан буфер на 10 раз. Переделан saveimage, getimage и все, что только можно. loadimage сделан по хардкору по оффсетам. Вроде как работать должно на всех версиях и офсеты никогда не менялись. Будет смысл хоть какой-то - можно переписать с получением всех заголовков (зачем мне пока не ясно).
Удаление изображений по image = nil пока не реализовано, только deleteimage.
Сообщение отредактировал DarkMaster - 9.4.2021, 18:10
Прикрепленные файлы
color.lua ( 68,94 килобайт )
Кол-во скачиваний: 78
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
DarkMaster |
9.4.2021, 17:59
|
          
Модератор UOPilot
Сообщений: 9.735
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29623
Пользователь №: 11.279

|
Цитата Это не бред. Это очень хорошие пинки компилятора(а он умнее, можно не спорить, это факт) глупому человеку. Каст явно режет точность числа, например double a = 2.0 не равно int b = 2 по определению представления дробных чисел. И передав 2.0 в функцию, которой нужен int. Вы уверены что хотите потерять дробную часть ? Компилятор и говорит об этом. И так со знаковыми типами. Компилятор все проверяет Я понимаю, когда я вместо int сую double. Речь о том, что когда ожидаются 4 байта целого и ты ему посылашь 4 байта целого, а он орет, что тип не тот, хотя там тупо через define все это переобъявлено. Если чесловек вместо int сует double, то он скорее всего идиот, уж простите =)
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
Cockney |
9.4.2021, 20:34
|
       
Master
Сообщений: 1.403
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 22551
Пользователь №: 16.156

|
Цитата(DarkMaster @ 9.4.2021, 17:59)  Я понимаю, когда я вместо int сую double. Речь о том, что когда ожидаются 4 байта целого и ты ему посылашь 4 байта целого, а он орет, что тип не тот, хотя там тупо через define все это переобъявлено. Если чесловек вместо int сует double, то он скорее всего идиот, уж простите =)
Ну с другой стороны, ошибок на пустом месте тоже не бывает, так ? Значит все же не совсем те же 4 байта целого. Возможно тип знаковый. Я вот сейчас поигрался с виндовым LPCSTR и некоторыми типами из библиотеки c++ - не вижу проблем. Можно проблему как-то воспроизвести ? Кусочек кода там показать.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|