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

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

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

ArtProg
> как именно высчитываются весовые коэффициенты для каждого отдельного цветового
> канала(R,G,B,A)?
Для всех четырёх каналов (R,G,B,A) одинаково. За единицу принимаем площадь пикселя приёмника. Цвет каждого пикселя источника умножается на площадь участка, попадающего на приёмник.

#181
12:07, 22 мая 2022

  Это то понятно, да. Но вот как посчитать площадь? Считать для клипнутого параллелограмма? Если не затруднит, подкиньте пожалуйста формулу(код тоже не помешает).

#182
(Правка: 16:58) 12:21, 22 мая 2022

ArtProg
> Считать для клипнутого параллелограмма?
Я же написал:
> На картинке показано с поворотом, просто не стал новую картинку рисовать.
Это скейл без поворота, никаких параллелограммов, только прямоугольники, код такой:

+ Показать

Используется только целочисленная математика (fixed point), никаких зависимостей, даже от стандартной библиотеки.
Возможен разный масштаб по вертикали и по горизонтали.
*src - указатель на массив источник, *dest - указатель на массив приёмник.
ws, hs - ширина и высота изображения в массиве источнике.
wd, hd - то же для массива приёмника.

#183
12:26, 22 мая 2022

  Вот, с кодом совсем другое дело. Мне до такого еще долго бы пришлось додумыватся). Спасибо!

#184
20:56, 25 мая 2022

Mikle
а можно как-то создать новый спрайт по cbuf-у?

ну т.е если я делаю что-то, и у меня есть массив с argb значениями
и создать новый спрайт по этому массиву, без setpixel циклов?
или быстрее не будет?

#185
21:02, 25 мая 2022

SilentPrayerCG
Сделай CopyMemory, быстрее не придумаешь.

#186
21:47, 25 мая 2022

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

#187
23:19, 25 мая 2022

Посмотри как в LoadFromBitmap() копируются данные из битмапа в cBuf спрайта.

#188
22:56, 28 мая 2022

Mikle
Я так понимаю, чтобы создать новый спрайт тупо из цбуфера
достаточно сделать так

  Public Sub New(ColorBuffer() As Integer, SpriteSize As Size)
        Init(SpriteSize.Width, SpriteSize.Height)
        cBuf = ColorBuffer
    End Sub

проверил работает

вот если в битмап нужно залить данные, тогда локбитс нужен

#189
23:13, 28 мая 2022

Просто NET сам неявно делает лок, если ты попробуешь сделать именно CopyMemory — тут уже без лока ColorBuffer не получится. Вот cBuf не нужно локать — он локается в Init.
Возможно, так будет грамотнее:

cBuf = ColorBuffer.Clone

Давно NET не загружал.

#190
23:25, 28 мая 2022

Mikle
а погоди.. я если через аргументы передам, он свяжет их как-бы..

copymemory это marshal.copy?

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

но если у меня на руках просто массив интеджеров, я не вижу способа через маршал его скопировать
ну точнее я ничего в этом маршале не понимаю, но ему intptr нужен

работает вот так
    Public Sub New(ColorBuffer() As Integer, SpriteSize As Size)
        Init(SpriteSize.Width, SpriteSize.Height)
        ColorBuffer.CopyTo(cBuf, 0)
    End Sub
копито, тогда будет копия массива в массив
.clone создает shallow copy, и я так и не понял что это значит

я пытался делать clone двух массивов, и у них значения связаны получаются., т.е меняешь в одном меняется в другом, я не уверен в чем разница между clone и если их просто сделать = друг другу

--

еще вопрос, почему даже когда копируешь cbuf в битмап через локбитс через маршал, то у битмапдаты, imagelock стоит readonly
я же записываю что-то туда... как это работает

#191
23:32, 28 мая 2022

В LoadFromBitmap битмап локается с флагом Imaging.ImageLockMode.ReadOnly. Очевидно, что для записи нужен другой флаг.
SilentPrayerCG
> copymemory это marshal.copy?
Скорее так: marshal.copy — это copymemory с проверками безопасности.
SilentPrayerCG
> я пытался делать clone двух массивов, и у них значения связаны получаются
Интересно, надо будет затестить...

#192
23:47, 28 мая 2022

Mikle
ты мне давал тогда код для получения битмапы из спрайта

    Public Function GetNewBitmap() As Bitmap
        Dim BmpDest As Bitmap

        BmpDest = New Bitmap(meWidth, meHeight, Imaging.PixelFormat.Format32bppArgb)
        Dim BMD As Imaging.BitmapData = BmpDest.LockBits(Rectangle.Round(BmpDest.GetBounds(GraphicsUnit.Pixel)), Imaging.ImageLockMode.ReadOnly, Imaging.PixelFormat.Format32bppArgb)
        Marshal.Copy(cBuf, 0, BMD.Scan0, meWidth * meHeight)
        BmpDest.UnlockBits(BMD)
        Return BmpDest
    End Function

тут тоже рид онли
я сейчас проверял, работает, взял из спрайта цбуф, и скопировал в битмап и вывел, хотя стоит ридонли

#193
14:18, 1 июня 2022

Mikle
Дак почему в этом коде где cbuf копируется в лоченый bitmap, всё-таки стоит readonly? И при этом работает.
Или все-таки я как-то не так понимаю этот флаг?

#194
19:10, 1 июня 2022

SilentPrayerCG
Я, когда давал тебе этот код, просто недосмотрел, не поменял флаг при копипасте, но код работает... Это выглядит странно.

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