Вопросы по разработке

Applications development, KoOS API questions
  • Может ли мне кто-нибудь рассказать, как правильно пользоваться libimg?
    Делаю следующее:

    Code: Select all

    ...
    draw_window:
    ...
    	invoke	img.decode, image_data, image_data.sizeof
    	mov	[image_data], eax
    	invoke	img.to_rgb, eax
    	mov	[rgb_img], eax
    	invoke img.draw, [rgb_img], 1, 1, 24, 24, 25, 25
    	ret
    
    ...
    
    @IMPORT:
    library \
    	libio,'libio.obj',\
    	libgfx,'libgfx.obj',\
    	libimg , 'libimg.obj',\
    	fontslib,'fonts_lib.obj'
    ...
    
    import	libimg			   , \
    	libimg.init , 'lib_init'   , \
    	img.is_img  , 'img_is_img' , \
    	img.to_rgb  , 'img_to_rgb' , \
    	img.decode  , 'img_decode' , \
    	img.flip    , 'img_flip'   , \
    	img.rotate  , 'img_rotate' , \
    	img.draw 	, 'img_draw'
    
    ...
    
    ; <--- DATA --->
    image_data:
    file 'file_new.png'
    .sizeof = $ - image_data
    
    Сабж успешно компилируется, запускается, рисуется окно, но видимо сразу, как только доходит до какого-то из этих блоков кода - вылетает
    Attachments
    На всякий случай прикрепляю и сам file_new.png
    file_new.png (1.75 KiB)
    На всякий случай прикрепляю и сам file_new.png Viewed 6840 times
  • Ну зачем img.to_rgb? Тебя не устраивает внутреннее представление libimg, подстраиваемое под конкретный файл? А libimg не устраивает подсунутый ей вместо изображения массив rgb.
    Сделаем мир лучше!
  • Прикрепил пример, выводящий часть файла iconstrp.gif. Там немного кода, сравни со своим.
    Attachments
    test.asm.txt (3.41 KiB)
    Downloaded 263 times
  • dunkaist, я поразбирался и таки вывел изображение. За код спасибо.
    Единственное, как я понял, прозрачные png не поддерживаются. Ладно, фиг с ним.
  • У меня есть подозрение, что одно из утверждений истинно:
    1) Графические файлы, вышедшие из пасти Фотошопа каким-то магическим образом коверкают исполняемый файл.
    ИЛИ
    2) Большие графические файлы каким-то магическим образом коверкают исполняемый файл.

    Утверждения основаны на попытке вывести файл, приложенный к сообщению с помощью libimg, файл подключается как внутренний через выше обозначенный

    Code: Select all

    image_data:
    file 'logo.png'
    .sizeof = $ - image_data
    
    Смысл в том, что update.png, приложенный к этому сообщению и скачанный с Интернета выводится вполне успешно (единственное - черный фон с шумами вместо прозрачного, что досадно). А вот logo.png (ровно, как и logo.jpg), созданный за пару минут в Фотошопе делают программу не исполняемой (@notify выводит, что файл не является исполняемым).

    Может быть у кого-нибудь имеются соображений, почему такое может происходить?

    P.S. Не бейте меня, пожалуйста, если ответ лежит на поверхности :P
    Attachments
    update.png
    update.png (2.34 KiB)
    Viewed 6775 times
    logo.png
    logo.png (5.48 KiB)
    Viewed 6775 times
    logo.jpg
    logo.jpg (14.76 KiB)
    Viewed 6775 times
  • Судя по тому что KIV и zSea (который не пользуется libimg, а использует собственные плагины) отображают нормально, то тебе разбирайся в твоем хитром коде.
  • maximYCH wrote:Единственное, как я понял, прозрачные png не поддерживаются.
    Это как сказать. Декодирование и работа с ними (повороты, отражения) поддерживаются на равне с непрозрачными. Но для вывода с альфа каналом нужно прочитать картинку из области окна, куда ты собираешься вывести изображдение, наложить одно на другое и только потом рисовать в окне. Libimg этого не делает.

    И я не понял, зачем ты пихаешь изображения в исполняемый файл.
    Attachments
    test.asm.txt (2.87 KiB)
    Downloaded 254 times
  • Да, я разобрался ещё до этого, убрал кое-что лишнее.

    Изображения я упаковываю в kex исключительно потому, что мне так нравится (привык я, что ресурсы программы внутри нее). Если имеются какие-либо причины так делать я готов их выслушать.
  • Банальный пример это легкая возможность модифицировать внений вид программы(перерисовать иконки например). Программисту это сделать легко можно, а вот например дизайнеру разбираться с сборкой из исходников, ради того чтобы изменить иконку - както тяжело. Имхо.
    И да. На случай использования этого ресурса в других программах в итоге уменьшит общий размер программы(куча программ с вшитыми ресурсами больше места занимают программ без ресурсов, но использующие один и тот же ресурс с носителя)
  • Но ведь может быть и другой случай, когда автор против изменения иконок, когда он хочет, что бы внешний вид программы был именно таким, каким его создал автор.
    Что же до общих ресурсов, то тут я могу представить использование иконок для расширений файлов, но что ещё, кроме них? По поводу общих иконок расширений файлов ничего против не имею и даже всеми руками за, в этом смысле я за стандартизацию.
  • maximYCH wrote:Но ведь может быть и другой случай, когда автор против изменения иконок, когда он хочет, что бы внешний вид программы был именно таким, каким его создал автор.
    Такому автору можно посоветовать не выёживаться искать самовыражение в другом месте, ибо не пользователь для программ, а программы для пользователя.
  • Freeman
    Не совсем верно - автор герой, царь и творец. Его мнение первично. Использовать или нет пользователю это не проблема автора. Естественно в плане объективности он может прислушаться к отдельным советам, а может и не прислушиваться.

    При всем выше мной сказанном, тенденция Максима запихивать в бинарники картинки меня критически не устраивает. Более того судя по реакции форумчан не устраивает эта идея не только меня. Максим как и большинство своих идей запостил в куче мест. Как уже прошедший такой этап человек смею уверить - это не работает. У людей критическое отторжение к тому что им настойчиво навязывают.

    Однако если человек хочет - он вправе в своей собственной программе использовать такой подход, а вот навязывать всем не вправе. Тем более что никаких логических доводов кроме "мне так нравится" не приведено, в то время как против уже привели доводы несколько раз.
  • Хорошо, я не буду запихивать их в бинарники.
    Впрочем один довод в пользу того метода могу показать: если файл с изображениями кнопок панели инструментов, к примеру, будет удален, то программа становится неработоспособной.

    Марат, я не за идею "Автор творит для себя", ибо я считаю, что нужна разумная интеграция и координация действий. Я за то, что бы вместе идти к результату и против идеи полной анархии в проекте. Именно благодаря этим установкам я осознал вчерашние ошибки, поэтому извинился и именно потому, что мне указывают, что подход с запихиванием изображений не является кошерным я уступаю место своих интересов интересам сообщества. Надеюсь, что когда-нибудь так будет повсеместно :)

    P.S. Но вот разделение по папкам я сделаю однозначно, если, конечно, не будет объективных возражений. Я про идею каждой программе (кроме некоторых системных, которые я собираюсь закинуть в /rd/1/system/) по папке. Иначе получится совсем бедлам. И да - речь идет не о транке, можно считать, что речь идет о своей сборке, которую по состоянию готовности я выложу на обсуждение.
  • Если дистрибутив не ограничен рамками как на RD, то ничто не мешает сделать для каждой программы свою директорию.
    В случае RD это бесполезная растрата дискового пространства. Каждая директория занимает минимум 512 байт (это если FAT12 и кластер в 1 сектор). В результате потери пространства в образе получаются страшные. Может ты и не знал про это - читай доки по тому же FAT прежде чем предлагать объективно невыгодные вещи. Вообще тебе еще как говаривал Владимир Ильич "Учиться, учиться, учиться..."
  • Who is online

    Users browsing this forum: No registered users and 0 guests