Войти
Вело-изобретателиФорумSR2D - софтовый 2D движок

SR2D, тестируем x64 версию. (12 стр)

Страницы: 19 10 11 12 13 14 Следующая »
#165
15:49, 19 мая 2022

SilentPrayerCG
В том и дело, что тип альфы не записан, как хочешь - так и используй.

#166
16:08, 19 мая 2022

Mikle я попробовал их сравнить, попиксельно, скейл ср2д и скейл битмапа
и они 100% все пиксели разные

я попробовал выкинуть альфу, и просто цвета пикселей переписать
получилось так

https://ibb.co/HXV13Vs - спрайт
https://ibb.co/597Bg7x - битмап

я так понимаю это с этим связано? с тем как он сохраняется?
или я все равно не понял?)

потому что вот эти светлые участки они в винде в любом просмотровщике видны, и в паинте и в гимпе, а не только в фотошопе

#167
16:18, 19 мая 2022

SilentPrayerCG
А ты чем битмап скейлишь? Если WinAPI, то там ведь вообще без фильтрации.

#168
17:21, 19 мая 2022

Mikle
sacledbitmap = new bitmap(sourcebitmap, size)
там бикубическая (вроде, я точно не знаю, такая-же как у тебя короче), полностью совпадает с твоей, кроме вот этих светлых участков

#169
18:31, 19 мая 2022

Что-то я совсем запутался. Давай так - скинь исходный файл и результаты скейлов на файловый хостинг (чтобы скачивать именно файл, а не картинку) типа Яндекс или Гугл диска.
Напиши как сохраняешь в SR2D, в FF_ARGB_PNG или FF_RGB_PNG.

#170
20:30, 19 мая 2022

ок только
FF_ARGB_PNG это где такое? это в imaging.imageformats где-то?

#171
20:49, 19 мая 2022

SilentPrayerCG
> это где такое?
Это при сохранении спрайта в файл средствами SR2D.

#172
8:22, 20 мая 2022

SilentPrayerCG
А, сорри, я же на VB6, как правило, всё проверяю. Считывает и сохраняет в файл, строго говоря, не SR2D, а порт. На VB6 это делается через GDI+, а форматы файла определены в Enum, но в .net немного по-другому, через встроенные в фреймворк средства, и синтаксис отличается. Возможно, тут и появляется разница, надо будет проверить.

#173
(Правка: 9:49) 9:48, 20 мая 2022

Mikle
https://disk.yandex.ru/d/mBBjspD3L6l_VA
вот в общем, файл исходный, и два скриншота, где я кодом вывел даунскейл спрайтом и даунскейл битмапом, и вот эту разницу видно

вот код

    Dim blacksprite As Sprite
    Dim blackbitmap As Bitmap

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        blacksprite.PaintToDevice(Hdc)
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim blackbitmapsprite As New Sprite(blackbitmap)
        blackbitmapsprite.PaintToDevice(Hdc)
    End Sub

    Private Sub FMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim testimage_sprite As New Sprite("LOD_debug.png")
        Dim testimage_bitmap As New Bitmap("LOD_debug.png")

        Dim testimage_sprite_scaled = New Sprite(testimage_sprite, Transform.None, testimage_sprite.Width * 0.25, testimage_sprite.Height * 0.25)
        Dim testimage_bitmap_scaled = New Bitmap(testimage_bitmap, New Drawing.Size(testimage_bitmap.Width * 0.25, testimage_bitmap.Height * 0.25))

        testimage_sprite_scaled.SaveToFile("testimage_sprite_scaled.png", Imaging.ImageFormat.Jpeg, True)
        testimage_bitmap_scaled.Save("testimage_bitmap_scaled.png", Imaging.ImageFormat.Png)

        blacksprite = New Sprite(testimage_sprite.Width, testimage_sprite.Height)
        blacksprite.ClearBuffer(ARGB(255, 0, 0, 0))

        blacksprite.Draw(testimage_sprite_scaled, 0, 0, Op.AlphaBlend)

        blackbitmap = New Bitmap(testimage_bitmap.Width, testimage_bitmap.Height)

        Dim g As Graphics
        g = Graphics.FromImage(blackbitmap)
        g.Clear(Color.FromArgb(255, 0, 0, 0))
        g.DrawImage(testimage_bitmap_scaled, New Point(0, 0))
    End Sub
#174
(Правка: 13:15) 10:51, 21 мая 2022

SilentPrayerCG
Я сделал программу: https://disk.yandex.ru/d/5yWBdp1D5ZY75Q

По нажатию клавиш R,G, B и A она показывает соответствующие каналы входного файла.
Обрати внимание на "кубики" в каналах R,G и B, ты же это не рисовал? Это фотошоп так сохранил, это потому, что он считает, что там, где альфа равна нулю — цвет не важен, его всё равно не видно, фотошоп делает такой рисунок, при котором будет максимальное сжатие.

По нажатию пробела ты увидишь ту же картинку, что делал сам при помощи SR2D — я воспроизвёл твои действия.
По нажатию Enter действие такое — выполняется альфаналожение по принципу Premultipled Alpha (в SR2D этого нет, поэтому я имитирую это в несколько строк), и только потом скейл до нужного размера. Это потому, что при скейле с билинейной фильтрацией цвет, испорченный фотошопом, попадает уже в пиксели с ненулевой прозрачностью.

Вывод — на битмапах что-то происходит по-другому, скорее всего - фильтрация при скейле другая. Если использовать не испорченный фотошопом PNG (без этих кубиков), то и по нажатию пробела увидишь нормальную картинку.

#175
20:05, 21 мая 2022

Mikle
Ладно гляну попозже.

Т.е она с кубиками уже в фотошопе, и когда через ср2д скейлишь, появляются эти артефакты?

#176
20:49, 21 мая 2022

SilentPrayerCG
> она с кубиками уже в фотошопе, и когда через ср2д скейлишь, появляются эти артефакты?
Верно.

#177
21:40, 21 мая 2022

Mikle
кстати какой вообще алгоритм скейла?
билинейный? не бикубический?

#178
(Правка: 22:52) 22:49, 21 мая 2022

Посмотрел сейчас определение — у меня ни то, и ни другое. Лучше:
af | SR2D, тестируем x64 версию.
То есть полное суммирование цветов исходных пикселей с весовыми коэффициентами их площадей, попадающих на новый пиксель.
На картинке показано с поворотом, просто не стал новую картинку рисовать.
На сколько понимаю, билинейка такой результат даст только при масштабировании не более, чем вдвое, если больше — нужно предварительно создавать мип-уровни до нужного масштаба. У меня вычисляется сразу, без мип-уровней.

#179
(Правка: 10:14) 10:13, 22 мая 2022

  Mikle, не могли бы Вы уточнить, как именно высчитываются весовые коэффициенты для каждого отдельного цветового канала(R,G,B,A)?

Страницы: 19 10 11 12 13 14 Следующая »
Вело-изобретателиФорумSR2D - софтовый 2D движок