libimg

Discussing libraries simplifying applications development
  • Leency wrote:Т.е. альфа канал теперь сохраняется?
    Да сохраняется.
    В формате png еще есть прозрачность через блок tRNS с палитрой (когда какой-либо цвет задается как прозрачный), но это не поддерживается. dunkaist сделал открытие прозрачных png и на сколько я понял блок tRNS у него читается. А при сохранении выделяется 4 байта на пиксель и палитра tRNS не будет записана в новый файл, но прозрачные пиксели останутся прозрачными.
    Функцией img_create создается 24 или 32 битное изображение. Функция img_encode принимает указатель на структуру с параметрами изображения и определяет какое изображение ей передалось и в зависимости от этого ставит нужные свойства в заголовок IHDR а также запаковывает изображение в IDAT.
  • I edited a pre-commit hook on the server to force asm style guide for libimg.asm and kiv.asm and committed fixed version in #8497.
    Here is the perl script by CleverMouse which is used to check the style guide on the server.

    IgorA,
    I can force the rules for all the files in /programs/develop/libraries/libs-dev/libimg, not only libimg.asm.
    Subversion will then reject a commit which doesn't follow the style guide and will report the line to fix.
    This will help to avoid e.g. mixed indentation like in pngmem.asm.
    Do you want me to force the style guide for files in libimg directory?

    If somebody wants to enforce the asm style guide for his/her project, let me know.
  • I think that these rules will not help much to improve the code. It all depends on the style with which someone is used to writing. If replacing tabs with 8 spaces is of any use, you can use it. On the other hand, tabbed files take up less space. It would be nice to have it automatically formatted somehow. Otherwise, you will have to manually reformat a bunch of code with these rules.
    Я думаю что эти правила особо не помогут улучшить код. Все зависит от того с каким стилем кто привык писать. Если замена табуляций на 8 пробелов даст какую-то пользу то можно применять. С другой стороны файлы с табуляцией занимают меньше места. Хорошо было-бы что-бы автоматически как-то форматировалось. А то с этими правилами прийдется кучу кода вручную переформатировать.
  • There is no automatic conversion for the reason mentioned before:
    CleverMouse wrote:В svn коммит либо проходит "как есть", либо вообще не проходит. Вариант "пропускать неправильный коммит, но тут же нормализовывать от имени робота" не годится, поскольку не решает проблемы мусорных изменений.
    The question is if you feel comfortable to follow this style guide. If yes, then I will reformat all the files in libimg dir myself.
    It is okay to say no, it is just a question.
  • I have been making few fixes to libimg lately. Therefore, this style correction is not critical for me. On the weekend I was not at home, so I did not answer earlier.
    В последнее время я делаю мало исправлений в libimg. Потому для меня не критично это исправление стиля. На выходных не был дома, потому не ответил раньше.
  • Привет!
    В функции img.draw (возможно и в других) серьезный баг.
    Сценарий: на вход подаем большинство правильных параметров, кроме первого, т.е. _img=0. Пример:

    Code: Select all

    img_draw(0, 10, 54, 64,64,0,0);
    
    Дальнейшее поведение непредсказуемое, в зависимости от того что записано по адресам к которым идет обращение. А не к структуре Image как предполагается.
    Вроде бы спасти ситуацию должна была img._.validate, но она беспристрастно всегда возвращает 0, т.е. успех. И выполнение продолжается дальше.
    Attachments
    img_draw.jpg
    img_draw.jpg (85.7 KiB)
    Viewed 6842 times
    img_validate.jpg
    img_validate.jpg (29.08 KiB)
    Viewed 6842 times
  • Yes, it's possible to check the first argument for 0. But it could also easily be 1, 2, 3, -1, -2, -3, 0xdeadbeef, 0xc0ffee, 0x12345678 and so on.
    I believe that passing an incorrect pointer to the function is not a fault of the function. Maybe that is the reason why img._.validate is still an empty stub after years of development.
    Sorry if my answer is not what you expected.
  • Спасибо за ответ. Указанный мной сценарий может быть не намеренный, а случайный (именно так и было с отлаживаемой мной программой, автором которой я не являюсь). Лично у меня другое мнение: проверка на 0 - стандартная операция. Ее, конечно, можно и нужно сделать в приложении, это хорошая практика проверять успешно ли завершилась зависимая операция, например, выделение памяти, перед тем как вызвать другую связанную функцию. Но далеко не все программисты это делают, либо откладывают это на потом и значит так будет всегда. Все сценарии проверок конечно выполнить нельзя, но, некоторые приведенные примеры в идеальном случае должны приводить к завершению программы, когда адреса попадут на невыделенную или системную страницу памяти (например, -1, -2, -3, 0xdeadbeef, 0xc0ffee).
  • I agree that having more such checks in libraries is convenient for broken programs, i.e. for debug purposes. At the same time more such checks in libraries make correct programs a bit slower and the whole system a bit larger. I believe we should pay more attention to correct programs.

    It's possible to create special builds and tools to ease debugging. But release builds, imho, should not have debug-only checks.
    Coldy wrote:Все сценарии проверок конечно выполнить нельзя, но, некоторые приведенные примеры в идеальном случае должны приводить к завершению программы, когда адреса попадут на невыделенную или системную страницу памяти (например, -1, -2, -3, 0xdeadbeef, 0xc0ffee).
    Yes, it could be a win-win solution.
  • Who is online

    Users browsing this forum: No registered users and 3 guests