Здравствуйте. Когда я сохраняю анимацию с экрана в gif, все линии почти не заметны, особенно в чате фейсбука. Например я создал нечто подобное первой анимации:
Мой gif:
Как можно увеличить толщину линий, кроме как set_pixel_size()? И еще интереусует как поставить более жирные точки в местах пересечения линий.
Как задать ширину линии, чтобы линии в gif отображались как на экране?
Как задать ширину линии, чтобы линии в gif отображались как на экране?
Last edited by turok1997 on Wed Feb 21, 2018 7:45 am, edited 1 time in total.
- NightRadio
- Site Admin
- Posts: 3955
- Joined: Fri Jan 23, 2004 12:28 am
- Location: Ekaterinburg. Russia
- Contact:
Re: Как задать ширину линии, чтобы линии в gif отображались как на экране?
Добрый день!
В Pixilang нет готовых функций для рисования более жирных линий/точек со сглаживанием.
Для точки со сглаживанием можно использовать вот такую функцию:
Жирную точку можно составить из нескольких точек рядом.
Линию, опять же, можно составить из тех же самых точек. Я сам так делаю в примере modulation.pixi
Или можно воспользоваться вот таким алгоритмом: https://ru.wikipedia.org/wiki/%D0%90%D0 ... 0%92%D1%83
В Pixilang нет готовых функций для рисования более жирных линий/точек со сглаживанием.
Для точки со сглаживанием можно использовать вот такую функцию:
Code: Select all
fn draw_antialiased_dot( $x, $y, $color )
{
$t = get_transp()
$xx = ( $x + 1024 ) * 256
$xc = $xx & 255
$yy = ( $y + 1024 ) * 256
$yc = $yy & 255
$ycc = 255 - $yc
$tx1 = 255 - $xc
$tx2 = $xc
$x = ( $xx >> 8 ) - 1024
$y = ( $yy >> 8 ) - 1024
transp( ( ( ( $tx1 * $ycc ) >> 8 ) * $t ) >> 8 )
dot( $x, $y, $color )
transp( ( ( ( $tx2 * $ycc ) >> 8 ) * $t ) >> 8 )
dot( $x + 1, $y, $color )
transp( ( ( ( $tx1 * $yc ) >> 8 ) * $t ) >> 8 )
dot( $x, $y + 1, $color )
transp( ( ( ( $tx2 * $yc ) >> 8 ) * $t ) >> 8 )
dot( $x + 1, $y + 1, $color )
transp( $t )
}
Линию, опять же, можно составить из тех же самых точек. Я сам так делаю в примере modulation.pixi
Или можно воспользоваться вот таким алгоритмом: https://ru.wikipedia.org/wiki/%D0%90%D0 ... 0%92%D1%83
Re: Как задать ширину линии, чтобы линии в gif отображались как на экране?
Спасибо за ответ! А на чем основана логика этой функции? Где можно почитать принцип её работы, ну или хотя бы как называется эта техника рисования точки? Ведь если это рисование соседних точек, то можно было бы просто ограничиться вызовами dot(x, y+1), dot(x+1, y) и т.д. Что за вычисления в функции?
Edit: читаю про anti-aliasing, и как я понял это коррекция яркости цвета?
Edit: читаю про anti-aliasing, и как я понял это коррекция яркости цвета?
- NightRadio
- Site Admin
- Posts: 3955
- Joined: Fri Jan 23, 2004 12:28 am
- Location: Ekaterinburg. Russia
- Contact:
Re: Как задать ширину линии, чтобы линии в gif отображались как на экране?
Логика такая: точка XY не попадает ровно в один пиксель, а находится где-то между четырьмя соседними (прямоугольник 2x2 пикселя). Поэтому рисуем четыре пикселя вместо одного. А непрозрачность каждого пикселя зависит от того, насколько он близок к координатам точки XY.
Грубо говоря, anti-aliasing сглаживает контуры объектов (в том числе и простых точек, как в моем примере), добавляя дополнительные полупрозрачные точки по краям.
Грубо говоря, anti-aliasing сглаживает контуры объектов (в том числе и простых точек, как в моем примере), добавляя дополнительные полупрозрачные точки по краям.