OberonCore https://forum.oberoncore.ru/ |
|
Кросс-платформенное чтение растров https://forum.oberoncore.ru/viewtopic.php?f=134&t=6961 |
Страница 1 из 1 |
Автор: | arisu [ Суббота, 03 Июнь, 2023 07:43 ] |
Заголовок сообщения: | Кросс-платформенное чтение растров |
кстати. вот вам магия для блита RGBA-битмапов из памяти без GDI+. смотреть в районе `AlphaBlend()`. оный `AlphaBlend()` надо в WinApi добавить, и одну структуру. тоже у меня можно взять. готовить битмап надо точно как у меня написано: с обменом цветов, и с premultiplied alpha. |
Автор: | Иван Денисов [ Воскресенье, 04 Июнь, 2023 23:10 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
arisu писал(а): кстати. вот вам магия для блита RGBA-битмапов из памяти без GDI+. смотреть в районе `AlphaBlend()`. оный `AlphaBlend()` надо в WinApi добавить, и одну структуру. тоже у меня можно взять. готовить битмап надо точно как у меня написано: с обменом цветов, и с premultiplied alpha. Здорово! то, что надо, похоже, я смогу это изучить чуть позднее. |
Автор: | arisu [ Понедельник, 05 Июнь, 2023 00:05 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
и можете попереть у меня из Raster читалку пингов, например. там можно собрать читалку и распаковщик deflate-потоков в один очень компактный файлик, и не надо таскать за собой большие библиотеки типа Vi и Zlib. |
Автор: | Иван Денисов [ Понедельник, 05 Июнь, 2023 04:16 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
arisu писал(а): и можете попереть у меня из Raster читалку пингов, например. там можно собрать читалку и распаковщик deflate-потоков в один очень компактный файлик, и не надо таскать за собой большие библиотеки типа Vi и Zlib. Да, это очень круто. Похоже это уберёт проблему с пропадающими картинками в Windows. |
Автор: | arisu [ Понедельник, 05 Июнь, 2023 14:32 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
да, забыл добавить. если где-то в LC не указана лицензия на код, и автора или нет, или только я (это одно и то же) — то такой Щидевр можно брать под лицензией WTFPL. это Официальное Разрешение типа. |
Автор: | Иван Денисов [ Понедельник, 05 Июнь, 2023 19:01 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
arisu писал(а): да, забыл добавить. если где-то в LC не указана лицензия на код, и автора или нет, или только я (это одно и то же) — то такой Щидевр можно брать под лицензией WTFPL. это Официальное Разрешение типа. Так как этот замечательный тип лицензии допускает перепубликацию под любой другой люцензией, то в составе сборки это будет под BSD 2-Clause License. |
Автор: | arisu [ Понедельник, 05 Июнь, 2023 23:54 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
без проблем. именно это и имеется в виду: цепляйте чего хотите, автор согласный. ;-) |
Автор: | arisu [ Вторник, 01 Август, 2023 06:28 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
кстати. если вы у меня брали читалку PNG, то там маленький багфикс. везде, где: Код: * UP.UP.bitdepth + UP.UP.bitdepth - 1) DIV UP.UP.bitdepth; должно быть: Код: * UP.UP.bitdepth + 8 - 1) DIV 8; (там два места таких.) |
Автор: | Иван Денисов [ Вторник, 08 Август, 2023 00:45 ] |
Заголовок сообщения: | Re: BlackBox 2.0 |
arisu писал(а): кстати. если вы у меня брали читалку PNG, то там маленький багфикс. везде, где: Код: * UP.UP.bitdepth + UP.UP.bitdepth - 1) DIV UP.UP.bitdepth; должно быть: Код: * UP.UP.bitdepth + 8 - 1) DIV 8; (там два места таких.) Это ещё предстоит делать. Спасибо за исправление. |
Автор: | Иван Денисов [ Четверг, 19 Октябрь, 2023 02:28 ] |
Заголовок сообщения: | Re: Кросс-платформенное чтение растров |
Александр помог адаптировать код arisu под Блэкбокс 2.0, и после этого я в целом осмыслил, что получается универсальный модуль WinRasters, который может рисовать любые форматы для которых сделан загрузчик изображений в структуру StdRasters.Image Загрузчики я придумал присоединять прямо к StdRasters.Raster StdRasters.Load превращает растр в картинку с возможностью чтения данных, это раз, а во вторых её уже может рисовать WinRasters. Самое главное - уход от GDI+ привел к тому, что картинки перестали пропадать при исчерпании RAM. Опробовать (покритиковать и предложить какие-то рационализаторские предложения) возможно в сборке 208. Пока это главным образом надо для Windows, так как в Linux изображение не пропадают. Но постепенно можно на всех платформах что-то подобным образом доделать. Есть проблема с раскодированием рисунков, нарисованных в MS Paint. Я пока закомментировал строгую проверку idat.Error(). Код: Log.String("DONE-EOF: err="); Log.Bool(idat.Error()); Log.Ln;
END; IF idat.crcIsWrong THEN img := NIL END (* this leads to break reading of PNG images from MS Paint TODO IF idat.Error() OR idat.crcIsWrong THEN img := NIL END *) END END DecodeImage; |
Автор: | arisu [ Суббота, 21 Октябрь, 2023 06:30 ] |
Заголовок сообщения: | Re: Кросс-платформенное чтение растров |
я рад, что пригодилось. обязательно потом посмотрю на ваш вариант: может там чего вкусного украсть есть. ;-) насчёт картинок из паинта: можно мне парочку таких? это вполне может быть какая-то ошибка в моём коде. архивом в ЛС, например. у меня пока что проблем с чтением картинок не было (16-битный цвет только не проверял, за неимением таких). я имею подозрение, что m$ как обычно плюёт на стандарты (в большинстве случаев причина именно такая), но мало ли… раз в сто лет и я виноват бываю. ;-) |
Автор: | Иван Денисов [ Суббота, 21 Октябрь, 2023 22:44 ] | ||
Заголовок сообщения: | Re: Кросс-платформенное чтение растров | ||
Вот такая картинка из Paint
|
Автор: | arisu [ Воскресенье, 22 Октябрь, 2023 10:03 ] |
Заголовок сообщения: | Re: Кросс-платформенное чтение растров |
таки мой косяк: криво портировал считалку adler32 с сишечки. забыл про то, что сишечный `%` и обероновский `MOD` — разные вещи. в общем, или возьмите у меня починеный "RasterInflate" (я там чуть-чуть лишнего выкинул), или просто замените там `PutByte` на вот это: Код: PROCEDURE (inf: Inflater) PutByte (bt: SHORTCHAR), NEW; BEGIN inf.dict[inf.dictEnd] := bt; inf.dictEnd := (inf.dictEnd + 1) MOD LEN(inf.dict); IF inf.mode = ZLib THEN INC(inf.a32s1, ORD(bt)); INC(inf.a32s2, inf.a32s1); IF (inf.a32s1 < 0) OR (inf.a32s2 < 0) THEN DEC(inf.a32s2, inf.a32s1); DEC(inf.a32s1, ORD(bt)); inf.a32s1 := inf.a32s1 MOD AdlerBase; inf.a32s2 := inf.a32s2 MOD AdlerBase; INC(inf.a32s1, ORD(bt)); INC(inf.a32s2, inf.a32s1) END END; INC(inf.totalUnpacked) END PutByte; спасибо за найденый баг! |
Автор: | arisu [ Воскресенье, 22 Октябрь, 2023 10:08 ] |
Заголовок сообщения: | Re: Кросс-платформенное чтение растров |
вы, кстати, если что не работает у меня взятое — не стесняйтесь меня сразу напрямую пинать (в теме, или лс-ом). я очень люблю багрепорты (в прямом, неироничном смысле). |
Автор: | arisu [ Воскресенье, 22 Октябрь, 2023 10:19 ] |
Заголовок сообщения: | Re: Кросс-платформенное чтение растров |
p.s.: на самом деле вполне достаточно только s2 проверять, он переполнится значительно быстрее, чем s1 — но давайте играть безопасно. на всякий случай. |
Автор: | Иван Денисов [ Понедельник, 23 Октябрь, 2023 00:52 ] |
Заголовок сообщения: | Re: Кросс-платформенное чтение растров |
arisu писал(а): просто замените там `PutByte` на вот это Класс, спасибо. Да, теперь читает. |
Автор: | Иван Денисов [ Вторник, 05 Декабрь, 2023 01:26 ] |
Заголовок сообщения: | Re: Кросс-платформенное чтение растров |
Использованы алгоритмы билинейной фильтрации, которые arisu портировал из A2, для вывода в Windows изображений, которые требуют масштабирования. Raster/Mod/Scale.odc. Так как часто в Windows применяется увеличение масштаба программы, то случай весьма частый. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |