The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]



"Доступна библиотека декодирования изображений SAIL"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Доступна библиотека декодирования изображений SAIL"  +/
Сообщение от opennews (ok), 14-Июл-20, 21:21 
Под лицензией MIT опубликована кросс-платформенная библиотека декодирования изображений SAIL. SAIL - это переписанный на С ребрендинг кодеков из давно не поддерживаемой программы просмотра изображений KSquirrel, но с наличием высокоуровнего абстрактного API и многочисленными улучшениями. Целевая аудитория: просмотрщики изображений, разработка игр, загрузка изображений в память для иных целей. Библиотека находится  в стадии разработки, но уже пригодна для использования. Бинарная совместимость и совместимость исходного кода на данном этапе разработки не гарантируется...

Подробнее: https://www.opennet.ru/opennews/art.shtml?num=53354

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по ответам | RSS]

2. Сообщение от Аноним (2), 14-Июл-20, 21:26   +8 +/
Единственная нормальная новость, от которой веет здоровым юниксом.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #5

4. Сообщение от Аноним (-), 14-Июл-20, 21:42   +2 +/
> Поддерживаемые на данный момент форматы: APNG (чтение, только на Windows)

Что?

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #21

5. Сообщение от Аноним (5), 14-Июл-20, 21:59   +/
А кто сказал, что юникс-подход здоров?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2 Ответы: #6, #62

6. Сообщение от Аноним (6), 14-Июл-20, 22:01   +16 +/
Практика показала, что отход от него порождает раздутые переусложнённые решения.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #5 Ответы: #31

7. Сообщение от Crazy Alex (ok), 14-Июл-20, 22:03   +2 +/
Декодер изображений общего назначения в 2020-м году без поддердки цветоаых профилей - это бред сивой кобылы
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #9, #13, #15, #17

8. Сообщение от Иваня (?), 14-Июл-20, 22:07   –3 +/
Как создать свой формат изображений, что почитать, посмотреть?🤔 Подскажите please🥺
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #16, #66

9. Сообщение от НяшМяш (ok), 14-Июл-20, 22:14   +/
>  Функции управления цветом (применение ICC профилей и т.д.)

А если чуть внимательнее читать?

upd. Извиняюсь за наезд, я сам косоглазый, это как раз то что НЕ поддерживается )

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #7

10. Сообщение от Аноним (10), 14-Июл-20, 22:16   +/
Может кто в курсе, оно хоть чем-то лучше stb_image для загрузки PNG/JPEG/BMP? Бегло посмотрел пример C/SDL - API выглядит странноватым и избыточным, как по мне. Так же, увидел пример Qt/C++, зачем оно там, когда все уже есть в Qt? Оно умеет что-то, чего не умеет Qt?
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #19

11. Сообщение от Аноним (13), 14-Июл-20, 22:16   +/
Jpeg, png (windows-only). Не вкатился что-то. Сегодня нужны webp, heif, и немного png -- жопегом никого не удивить. Тем более в играх жопеги совершенно не упали.

>KSquirrel

Выглядит как рипоф faststone image viewer. Тот немного специфичный. Он на паскале, быстрый и удобный, не пестрит багами. Жаль только не поддерживает современные форматы. Но сегодня у нас есть относительно приличный gwenview (код не очень хороший, правда), и нужды в таких стрёмных просмотрщиках нет. Алсо, gwenview что-то тормозноват, если сравнивать с тем же fsiv. Но это видимо претензия тоже к кутям, как и ограниченное число поддерживаемых форматов (libraw и ещё что-то там конечно вкорячены сбоку, грязно, но остальное от кутей зависит).

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #18, #22

13. Сообщение от Аноним (13), 14-Июл-20, 22:19   –1 +/
Вот да, это это уже вишенка на торте, если изначально было не ясно.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #7

14. Сообщение от Аноним (14), 14-Июл-20, 22:30   –2 +/
Поделка-самоделка. Как будто мало развитых и проверенных временем библиотек такого толка.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #20, #48

15. Сообщение от Аноним (13), 14-Июл-20, 22:33   +/
С другой стороны, этим должен заниматься http://www.littlecms.com/ -- альтернатив у нас нет. Т.е. притащи в код стрёмных легаси либ, сам позаботься о корректном отображении написав кода больше чем в тех либах было, сам реализуй поддержку форматов (уже проходили с pil, но сегодня то вроде 2020 на дворе). Не похоже на включил в проект и теперь работаешь с любыми изображениями. Поспешили-с.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #7 Ответы: #29

16. Сообщение от Сишникemail (?), 14-Июл-20, 22:50   +3 +/
http://www.compression.ru/compression.ru/book/
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #8 Ответы: #33

17. Сообщение от Аноним (21), 14-Июл-20, 23:07   +/
>Декодер изображений общего назначения в 2020-м году без поддердки цветоаых профилей - это бред сивой кобылы

Цветовые профили вынимаются и предоставляются клиентскому приложению. В задачи декодера не входит т.н. "применение" цветовых профилей. Если необходимо, приложение с помощью lcms "применит" полученный профиль.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #7 Ответы: #28

18. Сообщение от Аноним (21), 14-Июл-20, 23:09   –1 +/
>Сегодня нужны webp, heif, и немного png -- жопегом никого не удивить. Тем более в играх жопеги совершенно не упали.

на всё нужно время, всё есть в планах. HEIF насколько я помню покрывается патентами, и его использование без роялти невозможно.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #11 Ответы: #23

19. Сообщение от Аноним (21), 14-Июл-20, 23:10   +/
>API выглядит странноватым и избыточным

напиши почему именно, это можно обсудить.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #10 Ответы: #39

20. Сообщение от Аноним (21), 14-Июл-20, 23:18   –1 +/
Строго говоря, возраст SAIL - 17 лет. Просто она переживает ребрендинг.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #14

21. Сообщение от Аноним (21), 14-Июл-20, 23:20   –1 +/
Animated PNG. SAIL (ранее - ksquirrel-libs) была одна из первых библиотек в мире поддержавших его. Поддержка на иных платформах затруднительна, т.к. требует патчить libpng.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #4 Ответы: #38

22. Сообщение от Аноним (21), 14-Июл-20, 23:22   –1 +/
>Жаль только не поддерживает современные форматы

Именно современные форматы и стоят в приоритете. WEBP, AVIF, JPEG-XR, возможно BGP и FLIF.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #11 Ответы: #37

23. Сообщение от Аноним (13), 14-Июл-20, 23:23   +/
Но отсутствие tga совершенно непростительно, это основной универсальный формат. И при этом простой (в отличие от tiff и производных). Heif емнип открытый формат, это пакуемые в него данные могут быть продуктом "платного" кодека. А могут быть и роялти фри (нет такой вещи как непокрытые патентами кодеки: есть современные, есть устаревшие, и есть бесплатные для использования на определённых основаниях).
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #18 Ответы: #24

24. Сообщение от Аноним (21), 14-Июл-20, 23:26   +/
>Но отсутствие tga совершенно непростительно

Согласен полностью. Последние 4 месяца я был занят больше архитектурой. После стабилизации API, которое я думаю уже близиться, я буду заниматься исключительно кодеками.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #23

25. Сообщение от Аноним (25), 14-Июл-20, 23:32   +/
кто то действительно использует сабж (вместо тех же указанных "прямых конкурентов"), или автор новости == автор проекта?
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #26

26. Сообщение от Аноним (26), 14-Июл-20, 23:49   +2 +/
автор
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #25

27. Сообщение от Аноним (27), 15-Июл-20, 00:40   +/
Кому надо просто грузить картинки для OpenGL - есть великолепная libSOIL.
Ответить | Правка | Наверх | Cообщить модератору

28. Сообщение от Crazy Alex (ok), 15-Июл-20, 02:22   +1 +/
Пожалуй согласен
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #17

29. Сообщение от Crazy Alex (ok), 15-Июл-20, 02:24   +/
Волбще-то есть argyll как минимум. Который, насколько я помню, поприличнее, кстати
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #15 Ответы: #30

30. Сообщение от Аноним (13), 15-Июл-20, 02:48   +/
> Волбще-то есть argyll как минимум. Который, насколько я помню, поприличнее, кстати

Не используется ни одной программой. Ну такое. К тому же оно в 50 раз монструознее (btw что это за дичь у него в зависимостях http://freetype.sourceforge.net/jam/index.html *?). Но спасибо за инфу. Мне не понравился сайт (от этот http://www.argyllcms.com/).

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #29 Ответы: #35, #36

31. Сообщение от Аноним (31), 15-Июл-20, 03:15   +/
чья практика? кто сказал, что она что-то показали или показала то, о чем ты говоришь? пока что в твоих словака очередной бурчание ретрограда-хейтера, не более
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #6 Ответы: #41, #52

32. Сообщение от Аноним (32), 15-Июл-20, 05:23   +1 +/
Заходим в "src/sail-plugins/src/jpeg/jpeg.c"
Видим: #include <jpeglib.h>

Заходим в "src/sail-plugins/src/png/png.c"
Видим: #include <png.h>

> Простая, компактная и быстрая библиотека, написанная на С без сторонних зависимостей (кроме кодеков);

Вот это уточнение "кроме кодеков" - полностью ломает всю якобы "независимость", кому она нужна без кодеков?
Как насчёт независимости приложения от вот таких "библиотек", не лучше ли читать изображения напрямую через libjpeg и libpng?
Это функция что влезет в один экран, примеры легко гуглятся.

А кому нужно много возможностей - можно использовать OpenCV.

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #45

33. Сообщение от neAnonim (?), 15-Июл-20, 05:49   +/
а поновее есть? хочу почитать про x264,x265, vp1 итд
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #16 Ответы: #57

34. Сообщение от Анонолекс (?), 15-Июл-20, 06:02   +/
Годно, пусть будет.
Ответить | Правка | Наверх | Cообщить модератору

35. Сообщение от Crazy Alex (ok), 15-Июл-20, 06:29   +/
Ну да, он монстр потому что умеет всё, что связано с цветом, а не просто профиль применить. И AGPL  к тому же (что с моей точки зрения только плюс). Используется - в основном в составе DisplayCAL, которую многие считают лучшим софтом для калибровки и профилирования. В чисто рисовайках - это да, не прижился.

Ещё darktable что-то своё для профилей применяет, насколько я помню.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #30

36. Сообщение от Crazy Alex (ok), 15-Июл-20, 06:32   –3 +/
Претензий к билдтулу не понял - сейчас их один чёрт зоопарк. К сайту - и подавно, совершенно обычный простой текстовый сайт, без модной фигни, только информация. ну да ладно, это вкусовщина уже
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #30 Ответы: #65

37. Сообщение от Аноним (37), 15-Июл-20, 06:40   +1 +/
Хочу чтобы оно могло BMP.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #22 Ответы: #44

38. Сообщение от анонимм (?), 15-Июл-20, 06:50   +1 +/
Т.е. оно ещё один биндинг к libpng. Я уж понадеялся что здесь будет хоть одна монолитная библиотека. С линуксом-то норм всё, а вот под винду когда собираешь проект с sdl_image - там ещё с десяток dll тащить
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #21 Ответы: #43

39. Сообщение от Аноним (39), 15-Июл-20, 07:27   +3 +/
Это все мое субъективное мнение, возможно, все нормально и хорошо, но:

Вот это   `struct sail_context *context;  SAIL_TRY(sail_init(&context));` Оно явно делает аллокации внутри себя. Как мне переопределить malloc с системного на свой? Что мне делать если я не хочу зависеть от crt? (Стоит добавить возможность «всунуть» свою реализацию alloc/free?).

`struct sail_context` Контекст нужен чтобы хранить метаинформацию о плагинах (скорее всего, исходники я не смотрел), но я знаю какие форматы изображений мне нужны, зачем мне загружать что-то в runtime -> Зачем мне плагины и этот «очередной» контекст? (Стоит добавить возможность статической линковки?).

Меня смущает SAIL_TRY, возникают вьетнамские флешбеки с SUCCEEDED и прочим win32 счастьем. Мне не нравится, когда в примерах демонстрируют обработку ошибок при помощи «внутренних» макросов, которые хз что делают, пока не посмотришь в исходники. Так же мне это говорит о том, что есть некий внутренний код ошибок. В итоге в проекте у тебя появляются sail_error_t, vata_error_t, SomeOtherErrorType, blah_error_t и они все работают по-разному.

`struct sail_image *image; unsigned char *image_pixels;` почему оно отдельно? Может стоило назвать sail_image_meta? Это вызывает у меня дискомфорт какой-то.  

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #19 Ответы: #42, #46

40. Сообщение от Аноним (40), 15-Июл-20, 08:54   +/
> Прямые конкуренты из этой же области

Интересно почему ImageMagick (MagickCore, MagickWand и Magick++) не попала в список?

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #74

41. Сообщение от Аноним (41), 15-Июл-20, 09:33   +/
Моя личная и тех анонимов, которые согласились, поставив плюс.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #31

42. Сообщение от Аноним (21), 15-Июл-20, 10:04   +/
Дельные мысли, спасибо
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #39

43. Сообщение от Аноним (21), 15-Июл-20, 10:33   +/
Под виндой библиотеки типа libpng вкомпилируются статически прямо в кодеки. Посмотри инсталлер на странице релизов.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #38 Ответы: #64

44. Сообщение от Аноним (21), 15-Июл-20, 10:35   +/
Без вопросов, все популярные форматы будут сделаны. Tiff, bmp, gif, tga и т.п.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #37 Ответы: #47

45. Сообщение от Аноним (21), 15-Июл-20, 10:40   +/
Можно использовать libjpeg и напрямую, если нужно грузить исключительно жипеги.

Давай посмотрим с другой стороны. Размер клиентской библиотеки sail под windows - порядка 150 Kb. Плюс 500 Kb на один кодек jpeg, остальные можно просто удалить.

Получаем оверхед в 150 Kb размера, и микроскопический api из пяти строк конкретно для этой задачи.

Неплохо, я считаю. Какие есть мысли?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #32 Ответы: #49, #50

46. Сообщение от InuYasha (??), 15-Июл-20, 11:34   +/
>>Так же мне это говорит о том, что есть некий внутренний код ошибок.

И ничего страшного в этом нет. Для каждой библятеки заводи отдельый cpp-файл, там обрабатывай ошибки, а весь проект делай по-своему. Никто не заставляет же sail_error_t использовать повсюду.

Обычные сишные имена. Я бы назвал как-нить типа g_pszImagePixels, но это уже пахнет плюсами )

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #39 Ответы: #54, #76

47. Сообщение от InuYasha (??), 15-Июл-20, 11:45   +/
spr, wad :)
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #44 Ответы: #61, #63

48. Сообщение от user (??), 15-Июл-20, 12:30   +1 +/
Так в том то и проблема, что развитых. Везде добавлены рисование, обработка, шрифты и прочие лишние зависимости, а я хочу просто ввод/вывод.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #14

49. Сообщение от Аноним (32), 15-Июл-20, 12:42   +/
Какие мысли? Я считаю что плохо. Библиотека libjpeg-6b занимает 150кб. А только для чтения будет еще меньше. Сам когда-то уместил в 10кб бинарного кода, выбросив лишний функционал (и то даже поддержку прогрессивных JPEG оставил).
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #45

50. Сообщение от Аноним (32), 15-Июл-20, 13:09   +/
Для чтения PNG же есть lodepng и libspng без зависимостей от zlib, но тут именно libpng, что будет толще.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #45 Ответы: #51

51. Сообщение от Аноним (21), 15-Июл-20, 13:35   +1 +/
Здесь важно соблюсти баланс. Sail - библиотека общего назначения, но стремящаяся к минимализму. Можно конечно использовать libspng, но тут пострадает скорость в угоду размеру как мне кажется. Zlib, например, можно скомпилировать с amd64 инструкциями, что даст прирост скорости декодирования.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #50 Ответы: #59

52. Сообщение от Аноним (-), 15-Июл-20, 16:11   +1 +/
Практика Дельфи и Виндовс экосистем.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #31

53. Сообщение от Аноним (-), 15-Июл-20, 16:14   +/
> APNG (чтение, только на Windows

Как они этого добились? Чтение apng на других платформах чем-то принципиально отличается? Wtf?!

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #55

54. Сообщение от Аноним (10), 15-Июл-20, 16:25   +/
А я сказал что это страшно или плохо? Мне не нравится этот подход. Если можно что-то сделать не вводя на каждый чих новые сущноности или типы, то почему этого не сделать?
Я хочу от подобных библиотек получить следующий интерфейс.

На чтение:
size_t sail_read_image(const char* path, char** buffer, plugins_list* /*Опционально: список или NULL*/);

Возвращает количество прочитанных байт, если 0 - ошибка, текст/код которой которой можно узнать вызвав условный sail_last_error();

На запись:
size_t sail_write_image(const char* path, const char* buffer, size_t buf_size, const sail_write_options* opt, plugins_list* /*Опционально: список или NULL*/);

Возвращает количество записанных байт в сжатом виде, если 0 - ошибка, текст/код которой которой можно узнать вызвав тот же sail_last_error();

И хотелось бы получить внятный контроль над аллокациями внутри библиотеки. Все. Это мои хотелки, пожелания, но пусть автор сам решает что он хочет от своего проекта.

> Для каждой библятеки заводи отдельый cpp-файл...

Спасибо, конечно, за ценный совет, а то я не знал как организовывать свои проекты (НЕТ!). Откуда такая мания давать советы, когда не просят на ровном месте.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #46 Ответы: #56, #58

55. Сообщение от Аноним (21), 15-Июл-20, 17:24   +/
Чтение Animated PNG требует патченой версии libpng. Это ловушка этого формата. Официальная libpng не может поддерживать APNG, т.к. APNG - это расширение, а libpng - reference PNG implementation. Поэтому поддержка APNG делается только через распространение своей собственной патченой libpng. Распространение своей собственной libpng выглядит натурально только на Windows.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #53 Ответы: #60, #68

56. Сообщение от Аноним (21), 15-Июл-20, 17:39   +/
Я согласен со всем. То что можно сделать быстро, так это

- опциональный context для функций sail_read/sail_write. Эта идея уже витала, вы только её озвучили. Контекст хранит метаинформацию о плагинах, это верно! Нужен он например для получения списка поддерживаемых файловых расширений, например, чтобы сделать фильтр в диалоге выбора файлов
- функции sail_read_mem/sail_write_mem для уровня "Новичок"
- объединение sail_image и пиксельных данных - более чем очевидно что это нужно

То что сделать пока не знаю как:

- свой аллокатор - тоже очевидно что рано или поздно всплывёт опять

Что касается техники обработки ошибок, то я работал наверное с десятком из них. Такие TRY() макросы мне нравятся потому что:

- весь SAIL код, который может вернуть ошибку, выглядит унифицировано. Иначе разные функции начнут возвращать что попало как индикатор ошибки. Кто-то 0, кто-то NULL, и т.д. кто в лес, кто по дрова
- SAIL заботится об очистке памяти внутри себя при возникновении ошибки, опять же унифицировано. Макрос для этого просто называется по-другому, но код опять же выглядит унифицировано, хоть и слегка избыточно
- Макросы можно как хочешь тюнинговать. Например, чтобы проводить локальное деструктивное тестирование сделав так, чтобы макрос возвращал рандомные ошибки. Или печатать полотна бэктрейсов
- Клиентскому коду РЕКОМЕНДОВАНО использовать TRY() макросы, но вы же можете их и не использовать. Обрабатывайте результаты вызовов сами. 0 - успех, или код ошибки. Всё предельно просто.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #54 Ответы: #73

57. Сообщение от Аноним (57), 15-Июл-20, 17:57   +/
Ну так берите спеки, и вперёд. Там по 500 и более страниц, хватит надолго.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #33

58. Сообщение от Аноним (75), 15-Июл-20, 18:57   +/
Покажи пожалуйста если есть пример как ты используешь собственный аллокатор совместно с какой-то либоц. Можно в псевдокоде
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #54 Ответы: #72

59. Сообщение от Аноним (-), 15-Июл-20, 19:07   +/
> можно скомпилировать с amd64 инструкциями, что даст прирост скорости декодирования.

Или не даст. Если алгоритм правильный, как с LZ4, то там никаких специальных инструкций даром не надо, оно в память упирается. И для zlib, кстати, есть здорово ускоренная реализация. На zlib просто все подзабили - он работает и ладно. Да и смысл его улучшать? Кто хотел именно улучшений - накодили zstd, он жмет лучше и декодируется быстрее, и это на уровне алгоритмов сразу :D

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #51

60. Сообщение от Аноним (-), 15-Июл-20, 19:12   +/
Может тогда послать libpng курить бамбук? Достаточно дурацкая либа. Насколько я вижу, половина прог для работы с apng вообще libpng не пользуются. Не мешает им работать с форматом...
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #55

61. Сообщение от Аноним (-), 15-Июл-20, 19:13   +/
Wad это вообще контейнер, а не формат.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #47

62. Сообщение от Аноним (-), 15-Июл-20, 19:14   +1 +/
> А кто сказал, что юникс-подход здоров?

Те кто посмотрел что получается если на него забить - убер-монстры делаюшие дофига всего, одинаково хреново ну совсем не рулят :)

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #5

63. Сообщение от Аноним (13), 15-Июл-20, 19:14   +/
Наверное dds кроме шуток обязательно должен быть, а если ориентироваться на мультиплатформу, то и мобильные варианты. Но это всё немного вторично. А вот jpg only это проблема. Если мне нужна сеть, я беру curl и openssl. Если мне нужны картиночки, я беру костыли либо подгоняю требования под результат. Всё-таки удобный универсальный интерфейс взаимодействия с графическими файлами должен существовать, а его нет.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #47 Ответы: #67

64. Сообщение от Аноним (-), 15-Июл-20, 19:15   +/
> Под виндой библиотеки типа libpng вкомпилируются статически прямо в кодеки. Посмотри инсталлер
> на странице релизов.

А потом когда в какойнить либе оказывается дыра - проще сразу застрелиться нафиг. Потому что систему потом в принципе от дыр не запатчишь. Линуксы пришли к такой модели распостранения либ не просто так же для красоты.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #43

65. Сообщение от Аноним (-), 15-Июл-20, 19:16   +/
> Претензий к билдтулу не понял - сейчас их один чёрт зоопарк.

Не, вот знаете что! Тут вот хорошая аккуратная либа - и не надо ее скатывать в гомно. А зоопарк пусть у гугловых вебмакак будет, им по статусу положено.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #36

66. Сообщение от Аноним (-), 15-Июл-20, 19:18   +/
> Как создать свой формат изображений, что почитать, посмотреть?

Форумы по сжатию. Например encode.su - соотв. топики. Там есть пара довольно любопытных кодеков/идей, но до ума не доведены.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #8

67. Сообщение от Аноним (-), 15-Июл-20, 19:20   +/
> Всё-таки удобный универсальный интерфейс взаимодействия с графическими
> файлами должен существовать, а его нет.

В libsdl слегка есть, но... но дальше BMP оно на любителя.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #63

68. Сообщение от Аноним (13), 15-Июл-20, 19:42   +/
Это всё замечательно, но у меня в системе libpng с поддержкой apng (как и во многих дистрибутивах, я думаю), а анимации работают только в браузере. Браузер использует всё ту же системную libpng с apng, это значит, проблема исключительно в криво написанном софте,
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #55 Ответы: #69

69. Сообщение от Аноним (21), 15-Июл-20, 20:14   +/
>это значит, проблема исключительно в криво написанном софте,

совершенно верно.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #68

70. Сообщение от мяя (?), 15-Июл-20, 20:42   +/
Есть такая штука как libvips
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #71

71. Сообщение от Аноним (21), 15-Июл-20, 21:31   +/
>It has around 300 operations covering arithmetic, histograms, convolution, morphological operations, frequency filtering, colour, resampling, statistics and others

ЭЭ?

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #70

72. Сообщение от Аноним (39), 16-Июл-20, 02:17   +/
Эх… Мне откровенно лень делать полноценные примеры.

Просто скажу, как могло бы быть на мой взгляд.
Для С:

Некий внутренний макрос к alloc/free/realloc (https://github.com/nothings/stb/blob/b42009b3b9d4ca35bc703f5...)

Структура со стабами для пользовательских alloc/free/realloc. Судя по примерам, есть что-то подобное для seek/tell/flush/sync и т.д.

У себя я использую что-то вроде:
#define PUSH_TYPE(mem_arena, type, ...) (type *)push_mem__(mem_arena, sizeof(type), ## __VA_ARGS__)

#define PUSH_ARRAY(mem_arena, size, type, ...) (type *) push_mem__(mem_arena, (size)*sizeof(type), ## __VA_ARGS__)
И т.д.

Для C++ мне нравится подход eastl (https://github.com/electronicarts/EASTL).


Ответить | Правка | Наверх | Cообщить модератору
Родитель: #58 Ответы: #78

73. Сообщение от Аноним (-), 16-Июл-20, 05:05   +/
> - свой аллокатор - тоже очевидно что рано или поздно всплывёт опять

Именно свой аллокатор? А не возможность дать юзеру оверрайднуть на свой, типа как в https://github.com/Dridi/cashpack/blob/master/lib/hpack.c сделано? В идеале иногда еще хочется либу совсем без динамической аллокации, но это специфичная хотелка и не для такой либы походу.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #56 Ответы: #75

74. Сообщение от Аноним (74), 16-Июл-20, 10:36   +/
Потому что она тормозная и глючная блотварь с кривым API?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #40 Ответы: #79

75. Сообщение от Аноним (75), 16-Июл-20, 11:40   +/
Да, это и имел ввиду. Свой аллокатор с точки зрения пользователя библиотеки.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #73 Ответы: #80

76. Сообщение от Аноним (39), 16-Июл-20, 12:31   +1 +/
> g_pszImagePixels ... уже пахнет плюсами

Это... (g_)Global (p)Pointer to (s)String with (z)Zero terminator ImagePixels? Это пахнет венгерской нотацией, win api и кокой-то дичью...  

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #46

77. Сообщение от Аноним (21), 16-Июл-20, 16:30   +/
Неоценимой помощью проекту будет звёздочка (star) на Github. Спасибо за отзывы и предложения, друзья.
Ответить | Правка | Наверх | Cообщить модератору

78. Сообщение от Аноним (75), 16-Июл-20, 18:00   +/
С С++ конечно возникает проблема, т.к. почти все объекты вызывают С функции. То есть аллокаторов нужно указывать два - для аллокаций, которые делают С++ объекты сами внутри себя, и для сишных функций, которые этими объектами дёргаются.

Да-с, ничего путного в голову не приходит чтобы решить эту проблему. Идеи? 😀

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #72 Ответы: #81

79. Сообщение от Аноним (13), 16-Июл-20, 21:42   +/
Нет, скорее потому, что im не отдельная либа, а "вещь в себе". А по поводу кривого апи… В любом случае, другого софта, подобного im, нет. Наверное, ни одна программа, кроме этой, не сможет тебе даже корректно ресайзнуть изображение. Там надо ресайзить через колорспейс luv (да, я сравнивал с lab, luv много корректней), чтобы не запороть файл. Особенно бросается в глаза, когда ты ресайзишь 600dpi в ~90dpi. Ну и потом, distort resize тоже выглядит значительно лучше топорного в лоб ресайза. Насчёт глюков не скажу, насчёт тормозов, я бы хотел чтобы cuda или opencl что-нибудь ускоряли там, но они ничего не ускоряют и только добавляют артефактов. Так что уж как есть, альтернатив просто не существует в природе (да, я в курсе про форки, они ни в какое сравнение не идут).
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #74

80. Сообщение от Аноним (80), 16-Июл-20, 22:11   +/
> Да, это и имел ввиду. Свой аллокатор с точки зрения пользователя библиотеки.

Ну вон там выше пример, прямо в том файле.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #75

81. Сообщение от Аноним (81), 17-Июл-20, 12:08   +/
Большинство известных мне реализаций new в С++ вызывают внутри себя malloc (GCC/Clang/MSVC). В случае MSVC malloc вызывает HeapAlloc или VirtualAlloc из kernel32. Чтобы избавиться от вызова «стандартного» malloc я компиляю (вернее линкую, но не суть) с nodefaultlib/nostdlib/nolibc и делаю свою реализацю malloc/free, как правило из заранее выделенного буфера на старте программы.  Это имеет свои недостатки, например приходится самому изобретать termination handler при вызове pure virtual функции-члена или изобретать каст из float/double в int (зачем-то подобные вещи впихнуты в crt и чтобы от него избавиться приходится изобретать велосипеды, хотя самописный каст из float в int работает бысрее).

eastl внутри себя вызывает «собственную» реализацию глобального оператора new [], т.е. ты условно всегда должен определить при использовании что-то подобное:  

void* operator new[](size_t size, const char* name, int flags, unsigned debug_flags, const char* file, int line)
{
    return ::operator new[](size);
}

void* operator new[](size_t size, size_t alignment, size_t alignment_offset, const char* name, int flags, unsigned debug_flags, const char* file, int line)
{
    return ::operator new[](size);
}

Т.е. если ты внутри своей библиотеки используешь new, ты можешь пользоваться своей реализацией оператора, и поставлять что-то подобное при компиляции по «умолчанию» при соответствующем флаге в CMake. Если пользователь захочет заменить, флаг ему в руки, пусть только переопределит твой глобальный new. Если ты не используешь нигде new, то черт с ним, макросов/стабов для alloc/free вполне хватит.  

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #78


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру