OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 28 Март, 2024 17:57

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 17 ] 
Автор Сообщение
СообщениеДобавлено: Суббота, 03 Июнь, 2023 07:43 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
кстати. вот вам магия для блита RGBA-битмапов из памяти без GDI+. смотреть в районе `AlphaBlend()`. оный `AlphaBlend()` надо в WinApi добавить, и одну структуру. тоже у меня можно взять. готовить битмап надо точно как у меня написано: с обменом цветов, и с premultiplied alpha.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Воскресенье, 04 Июнь, 2023 23:10 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
кстати. вот вам магия для блита RGBA-битмапов из памяти без GDI+. смотреть в районе `AlphaBlend()`. оный `AlphaBlend()` надо в WinApi добавить, и одну структуру. тоже у меня можно взять. готовить битмап надо точно как у меня написано: с обменом цветов, и с premultiplied alpha.

Здорово! то, что надо, похоже, я смогу это изучить чуть позднее.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Понедельник, 05 Июнь, 2023 00:05 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
и можете попереть у меня из Raster читалку пингов, например. там можно собрать читалку и распаковщик deflate-потоков в один очень компактный файлик, и не надо таскать за собой большие библиотеки типа Vi и Zlib.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Понедельник, 05 Июнь, 2023 04:16 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
и можете попереть у меня из Raster читалку пингов, например. там можно собрать читалку и распаковщик deflate-потоков в один очень компактный файлик, и не надо таскать за собой большие библиотеки типа Vi и Zlib.

Да, это очень круто. Похоже это уберёт проблему с пропадающими картинками в Windows.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Понедельник, 05 Июнь, 2023 14:32 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
да, забыл добавить. если где-то в LC не указана лицензия на код, и автора или нет, или только я (это одно и то же) — то такой Щидевр можно брать под лицензией WTFPL. это Официальное Разрешение типа.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Понедельник, 05 Июнь, 2023 19:01 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
да, забыл добавить. если где-то в LC не указана лицензия на код, и автора или нет, или только я (это одно и то же) — то такой Щидевр можно брать под лицензией WTFPL. это Официальное Разрешение типа.

Так как этот замечательный тип лицензии допускает перепубликацию под любой другой люцензией, то в составе сборки это будет под BSD 2-Clause License.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Понедельник, 05 Июнь, 2023 23:54 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
без проблем. именно это и имеется в виду: цепляйте чего хотите, автор согласный. ;-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Вторник, 01 Август, 2023 06:28 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
кстати. если вы у меня брали читалку PNG, то там маленький багфикс. везде, где:
Код:
* UP.UP.bitdepth + UP.UP.bitdepth - 1) DIV UP.UP.bitdepth;

должно быть:
Код:
* UP.UP.bitdepth + 8 - 1) DIV 8;

(там два места таких.)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox 2.0
СообщениеДобавлено: Вторник, 08 Август, 2023 00:45 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
кстати. если вы у меня брали читалку PNG, то там маленький багфикс. везде, где:
Код:
* UP.UP.bitdepth + UP.UP.bitdepth - 1) DIV UP.UP.bitdepth;

должно быть:
Код:
* UP.UP.bitdepth + 8 - 1) DIV 8;

(там два места таких.)

Это ещё предстоит делать. Спасибо за исправление.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 19 Октябрь, 2023 02:28 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Александр помог адаптировать код 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;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 21 Октябрь, 2023 06:30 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
я рад, что пригодилось. обязательно потом посмотрю на ваш вариант: может там чего вкусного украсть есть. ;-)

насчёт картинок из паинта: можно мне парочку таких? это вполне может быть какая-то ошибка в моём коде. архивом в ЛС, например. у меня пока что проблем с чтением картинок не было (16-битный цвет только не проверял, за неимением таких).

я имею подозрение, что m$ как обычно плюёт на стандарты (в большинстве случаев причина именно такая), но мало ли… раз в сто лет и я виноват бываю. ;-)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 21 Октябрь, 2023 22:44 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Вот такая картинка из Paint


Вложения:
4445.png
4445.png [ 13.2 КБ | Просмотров: 14814 ]
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 22 Октябрь, 2023 10:03 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
таки мой косяк: криво портировал считалку 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;

спасибо за найденый баг!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 22 Октябрь, 2023 10:08 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
вы, кстати, если что не работает у меня взятое — не стесняйтесь меня сразу напрямую пинать (в теме, или лс-ом). я очень люблю багрепорты (в прямом, неироничном смысле).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 22 Октябрь, 2023 10:19 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
p.s.: на самом деле вполне достаточно только s2 проверять, он переполнится значительно быстрее, чем s1 — но давайте играть безопасно. на всякий случай.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Понедельник, 23 Октябрь, 2023 00:52 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
arisu писал(а):
просто замените там `PutByte` на вот это

Класс, спасибо. Да, теперь читает.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 05 Декабрь, 2023 01:26 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Использованы алгоритмы билинейной фильтрации, которые arisu портировал из A2, для вывода в Windows изображений, которые требуют масштабирования. Raster/Mod/Scale.odc.
Так как часто в Windows применяется увеличение масштаба программы, то случай весьма частый.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB