Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/29: Рейтинг темы: голосов - 29, средняя оценка - 4.72
4 / 2 / 3
Регистрация: 30.07.2019
Сообщений: 126

Как сделать так, чтобы линия "тянулась" за мышью?

27.10.2019, 04:34. Показов 6865. Ответов 25

Студворк — интернет-сервис помощи студентам
Доброго времени суток! При написании графического редактора столкнулся с проблемой, никак не получается решить.
В общем линия у меня рисуется в локальных координатах открытого изображения (нужно именно так), за мышкой тянется, но прорисовывается каждый шаг движения мыши, а мне нужно удалить только что нарисованное и нарисовать линию заново при событии MouseMove. Метод Clear не помогает, так как линия должна идти поверх открытого рисунка, а не на однородном фоне.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
        private void zoomPictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
                {
                    //открытый рисунок
                    canvas = new Bitmap(zoomPictureBox1.Image); 
                    // холст для рисования линии
                    canvas2 = new Bitmap(zoomPictureBox1.Image.Width, zoomPictureBox1.Image.Height);
                    //стртовая точка в локальных координатах открытого изображения
                    StartPositionLassoScreen = new Point(zoomPictureBox1.ClientToImagePoint(e.Location).X,
                        zoomPictureBox1.ClientToImagePoint(e.Location).Y);
                    //признак начала рисования
                    pressedLasso = true;
                }
        }
 
        private void zoomPictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (pressedLasso)
                {
                    canvas2 = canvas;
                    Graphics graph = Graphics.FromImage(canvas2);
                    //-----------------------------------------------------
                    // Здесь нужно удалить только что нарисованное, если оно есть, но не трогать открытый рисунок...
                    //graph.Clear(Color.Empty); //так работает, но открытый рисунок исчезает
                    //-----------------------------------------------------
                    //вторая точка линии (тянется за курсором)
                    NextPositionLassoScreen = zoomPictureBox1.ClientToImagePoint(e.Location);
                    //метод рисования линии попиксельно
                    Bresenham_Line(graph, Color.Violet,
                        (int)(StartPositionLassoScreen.X), (int)(StartPositionLassoScreen.Y),
                        (int)(NextPositionLassoScreen.X), (int)(NextPositionLassoScreen.Y));
                    zoomPictureBox1.UpdateImage(canvas2);
                }
Помогите, пожалуйста, решить данную проблему. Может быть можно как-то очистить графику не цветом, а рисунком? Очень нужно...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.10.2019, 04:34
Ответы с готовыми решениями:

Сделать так, чтобы линия "тянулась" за курсором мыши
Делаю маленький граф редактор. По щелчку мыши задаются начальные координаты, по отпусканию -конечные. Как сделать чтобы как в графических...

Как сделать так, чтобы в анимации за точкой рисовалась линия
Как сделать так,чтобы в анимации за точкой рисовалась линия?

Как сделать так, чтобы линия разрыва страницы НЕ ПРОХОДИЛА через объединенные ячейки?
Братья и сёстры, кто подскажет - как сделать так, чтобы линия разрыва страницы НЕ ПРОХОДИЛА через объединенные ячейки? Буду очень благодарен

25
 Аватар для ashsvis
923 / 503 / 202
Регистрация: 08.10.2018
Сообщений: 1,553
Записей в блоге: 11
27.10.2019, 09:21
Лучший ответ Сообщение было отмечено Keramer82 как решение

Решение

Цитата Сообщение от Keramer82 Посмотреть сообщение
Помогите, пожалуйста
Почитайте здесь, возможно, найдёте для себя решение: Создаём рамку выбора для графического редактора.
1
4 / 2 / 3
Регистрация: 30.07.2019
Сообщений: 126
27.10.2019, 10:59  [ТС]
Там речь идет совсем о другом. Мне не нужно создавать выделение. Моя задача состоит совсем в другом. Нужно стереть только что нарисованную линию не затрагивая открытую картинку. Через Paint я уже пробовал перерисовывать, но там возникает проблема в передачи правильных координат стартовой точки при увеличении, т.к. используются локальные координаты picturebox а не открытой картинки... В общем нужно рисовать линию именно так, а при движении мышью обновлять нарисованное, а не добавлять к уже нарисованному.
0
 Аватар для ashsvis
923 / 503 / 202
Регистрация: 08.10.2018
Сообщений: 1,553
Записей в блоге: 11
27.10.2019, 12:16
Лучший ответ Сообщение было отмечено Keramer82 как решение

Решение

Цитата Сообщение от Keramer82 Посмотреть сообщение
Там речь идет совсем о другом.
Да, верно, метод создания "резиновой" линии там реализован по-другому и, как мне кажется, проще.
В методе Paint сначала рисуется картинка, а потом сверху неё линия.
1
4 / 2 / 3
Регистрация: 30.07.2019
Сообщений: 126
27.10.2019, 12:34  [ТС]
Кажется, нащупал решение. Добавил на событие Paint сложение 2-х картинок в 3-ю.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
    public partial class Form1 : Form
    {
        bool pressedLasso = false;
        Bitmap canvas;
        Bitmap canvas2;
        Bitmap ResultCanvas;
        Point StartPositionLassoScreen;
        Point NextPositionLassoScreen;
 
        private void zoomPictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                 ResultCanvas = new Bitmap(zoomPictureBox1.Image);
                 canvas = new Bitmap(zoomPictureBox1.Image);
                 canvas2 = new Bitmap(zoomPictureBox1.Image.Width, zoomPictureBox1.Image.Height);
                 StartPositionLassoScreen = new Point(zoomPictureBox1.ClientToImagePoint(e.Location).X,
                        zoomPictureBox1.ClientToImagePoint(e.Location).Y);
                 pressedLasso = true;
            }
        }
 
        private void zoomPictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (zoomPictureBox1.Image != null)
            {
                if (pressedLasso)
                {
                    Graphics graph = Graphics.FromImage(canvas2);
                    graph.Clear(Color.Empty);
                    NextPositionLassoScreen = zoomPictureBox1.ClientToImagePoint(e.Location);
                    Bresenham_Line(graph, Color.Violet,
                            (int)(StartPositionLassoScreen.X), (int)(StartPositionLassoScreen.Y),
                            (int)(NextPositionLassoScreen.X), (int)(NextPositionLassoScreen.Y));
 
                }
            }
        }
 
        private void zoomPictureBox1_Paint(object sender, PaintEventArgs e)
        {
            if (pressedLasso)
            {
                Bitmap TargetBitmap = new Bitmap(canvas);
                Graphics graph = Graphics.FromImage(ResultCanvas);
                graph.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver;
                graph.DrawImage(TargetBitmap, 0, 0);
                graph.DrawImage(canvas2, 0, 0);
                zoomPictureBox1.UpdateImage(ResultCanvas);
                graph.Dispose();
                TargetBitmap.Dispose();
            }
        }
    }
Но теперь увеличилось потребление памяти, не могу отловить где она утекает. ashsvis, подскажите, пожалуйста, где я не освобождаю ресурсы?
0
 Аватар для ashsvis
923 / 503 / 202
Регистрация: 08.10.2018
Сообщений: 1,553
Записей в блоге: 11
27.10.2019, 12:40
Лучший ответ Сообщение было отмечено Keramer82 как решение

Решение

Цитата Сообщение от Keramer82 Посмотреть сообщение
увеличилось потребление памяти
Утекает в строках 15 и 16. Используйте конструкцию using(...) { ... }
1
4 / 2 / 3
Регистрация: 30.07.2019
Сообщений: 126
27.10.2019, 13:13  [ТС]
Цитата Сообщение от ashsvis Посмотреть сообщение
Используйте конструкцию using(...) { ... }
Попробовал так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
                if (e.Button == MouseButtons.Left)
                {
                    ResultCanvas = new Bitmap(zoomPictureBox1.Image);
                    using (canvas = new Bitmap(zoomPictureBox1.Image))
                    {
                        using (canvas2 = new Bitmap(zoomPictureBox1.Image.Width, zoomPictureBox1.Image.Height))
                        {
                            StartPositionLassoScreen = new Point(zoomPictureBox1.ClientToImagePoint(e.Location).X,
                                    zoomPictureBox1.ClientToImagePoint(e.Location).Y);
                            pressedLasso = true;
                        }
                    }
                }
Выбросило в ошибку "Недопустимый параметр" на mouseMove в строку
C#
1
Graphics graph = Graphics.FromImage(canvas2);
Видимо я Вас неправильно понял, как использовать конструкцию using(...) { ... }. Подскажите, пожалуйста, это моя первая программа, и я еще во многом путаюсь.
0
 Аватар для ashsvis
923 / 503 / 202
Регистрация: 08.10.2018
Сообщений: 1,553
Записей в блоге: 11
27.10.2019, 13:33
Цитата Сообщение от Keramer82 Посмотреть сообщение
using (canvas = new Bitmap(zoomPictureBox1.Image))
нужно так:
C#
1
2
3
4
using (var canvas = new Bitmap(zoomPictureBox1.Image))
{
 ...
}
Видите отличие?
1
4 / 2 / 3
Регистрация: 30.07.2019
Сообщений: 126
27.10.2019, 14:04  [ТС]
Если при using создавать новые переменные, то потеряется глобальность переменных canvas и canvas2, которые используются и в mouseMove и в Paint. Как же быть?
В общем, я написал так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
                if (e.Button == MouseButtons.Left)
                {
                    ResultCanvas = new Bitmap(zoomPictureBox1.Image);
                    using (var canvas = new Bitmap(zoomPictureBox1.Image))
                    {
                        using (var canvas2 = new Bitmap(zoomPictureBox1.Image.Width, zoomPictureBox1.Image.Height))
                        {
                            StartPositionLassoScreen = new Point(zoomPictureBox1.ClientToImagePoint(e.Location).X,
                            zoomPictureBox1.ClientToImagePoint(e.Location).Y);
                            pressedLasso = true;
                        }
                    }
                }
Выбросило в ошибку "Значение не может быть неопределенным" на mouseMove в строку
C#
1
Graphics graph = Graphics.FromImage(canvas2);
Добавлено через 3 минуты
Цитата Сообщение от ashsvis Посмотреть сообщение
нужно так:
C#
Выделить код
1
2
3
4
using (var canvas = new Bitmap(zoomPictureBox1.Image))
{
...
}
Видите отличие?
Если при using создавать новые переменные, то потеряется глобальность переменных canvas и canvas2, которые используются и в mouseMove и в Paint. Как же быть?
В общем, я написал так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
                if (e.Button == MouseButtons.Left)
                {
                    ResultCanvas = new Bitmap(zoomPictureBox1.Image);
                    using (var canvas = new Bitmap(zoomPictureBox1.Image))
                    {
                        using (var canvas2 = new Bitmap(zoomPictureBox1.Image.Width, zoomPictureBox1.Image.Height))
                        {
                            StartPositionLassoScreen = new Point(zoomPictureBox1.ClientToImagePoint(e.Location).X,
                            zoomPictureBox1.ClientToImagePoint(e.Location).Y);
                            pressedLasso = true;
                        }
                    }
                }
Выбросило в ошибку "Значение не может быть неопределенным" на mouseMove в строку
C#
1
Graphics graph = Graphics.FromImage(canvas2);
0
 Аватар для ashsvis
923 / 503 / 202
Регистрация: 08.10.2018
Сообщений: 1,553
Записей в блоге: 11
27.10.2019, 14:15
Цитата Сообщение от Keramer82 Посмотреть сообщение
потеряется глобальность переменных canvas и canvas2
Если переменные у Вас глобальные, то и незачем без конца пересоздавать их в методе нажатия кнопки "мышки"?
1
4 / 2 / 3
Регистрация: 30.07.2019
Сообщений: 126
27.10.2019, 14:46  [ТС]
ashsvis, спасибо. Перекинул строки
C#
1
2
canvas = zoomPictureBox1.Image;
canvas2 = new Bitmap(zoomPictureBox1.Image.Width, zoomPictureBox1.Image.Height);
на включение инструмента.
Стало немного получше. Потребление памяти растет, если часто нажимать на кнопку мыши. Если немного подождать, то потребление памяти падает до уровня, который был перед включением инструмента.
0
 Аватар для ashsvis
923 / 503 / 202
Регистрация: 08.10.2018
Сообщений: 1,553
Записей в блоге: 11
27.10.2019, 14:54
А во второй строке canvas2 = new Bitmap(...) почему осталось?
0
4 / 2 / 3
Регистрация: 30.07.2019
Сообщений: 126
27.10.2019, 16:12  [ТС]
Это первое создание пустого Bitmap с размерами открытой картинки. Т.е. в первый раз оно и создается при инициализации инструмента

Добавлено через 9 минут
Дальше этот Bitmap только используется в mouseMove и Paint. Теперь нужно не забыть освободить ресурсы этого Bitmap, например, при закрытии контура, верно?
0
 Аватар для ashsvis
923 / 503 / 202
Регистрация: 08.10.2018
Сообщений: 1,553
Записей в блоге: 11
27.10.2019, 17:46
Цитата Сообщение от Keramer82 Посмотреть сообщение
например, при закрытии контура
Может быть и верно. Нужно весь код смотреть.
0
4 / 2 / 3
Регистрация: 30.07.2019
Сообщений: 126
27.10.2019, 18:25  [ТС]
Весь код я выложить пока не готов, т.к. он занимает более 2000 строк... Знаю, нужно шлифовать, сокращать и оптимизировать. Это еще впереди и тут вряд-ли кто мне поможет, никто не будет читать столько чужого кода, особенно новичка.
0
 Аватар для ashsvis
923 / 503 / 202
Регистрация: 08.10.2018
Сообщений: 1,553
Записей в блоге: 11
27.10.2019, 18:33
Цитата Сообщение от Keramer82 Посмотреть сообщение
нужно шлифовать
Удачи!
1
4 / 2 / 3
Регистрация: 30.07.2019
Сообщений: 126
29.10.2019, 13:44  [ТС]
Возникла проблема, не могу понять в чем причина, но на событие MouseDown не срабатывает счетчик.
ashsvis, Вам уже знаком этот код, может, если не затруднит, подскажите, что я делаю не так в этом коде?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
        private void zoomPictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
                if (e.Button == MouseButtons.Left)
                {
                    // Вот это срабатывает только на первый клик
                    //--------------------------------------------------
                    countPointLasso++;
                    label2.Text = "Point_" + countPointLasso.ToString();
                    //--------------------------------------------------
                    if (canvas != null)
                    {
                        canvas.Dispose();
                    }
                    canvas = new Bitmap(zoomPictureBox1.Image);
                    ResultCanvas = new Bitmap(zoomPictureBox1.Image);
                    StartPositionLassoScreen = new Point(zoomPictureBox1.ClientToImagePoint(e.Location).X,
                            zoomPictureBox1.ClientToImagePoint(e.Location).Y);
                    pressedLasso = true;
                }
        }
        private void zoomPictureBox1_Paint(object sender, PaintEventArgs e)
        {
            if (pressedLasso)
            {
                Bitmap TargetBitmap = new Bitmap(canvas);
                Graphics graph = Graphics.FromImage(ResultCanvas);
                graph.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver;
                graph.DrawImage(TargetBitmap, 0, 0);
                graph.DrawImage(canvas2, 0, 0);
                zoomPictureBox1.UpdateImage(ResultCanvas);
                graph.Dispose();
                TargetBitmap.Dispose();
            }
        }
Я так понимаю, это из-за события zoomPictureBox1_Paint. Но как исправить ситуацию, просто не знаю.

Добавлено через 2 минуты
Забыл добавить MouseMove
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        private void zoomPictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (zoomPictureBox1.Image != null)
            {
                if (pressedLasso)
                {
                    Graphics graph = Graphics.FromImage(canvas2);
                    graph.Clear(Color.Empty);
                    NextPositionLassoScreen = zoomPictureBox1.ClientToImagePoint(e.Location);
                    Bresenham_Line(graph, Color.Violet,
                            (int)(StartPositionLassoScreen.X), (int)(StartPositionLassoScreen.Y),
                            (int)(NextPositionLassoScreen.X), (int)(NextPositionLassoScreen.Y));
 
                }
            }
        }
0
 Аватар для ashsvis
923 / 503 / 202
Регистрация: 08.10.2018
Сообщений: 1,553
Записей в блоге: 11
29.10.2019, 14:23
Цитата Сообщение от Keramer82 Посмотреть сообщение
не срабатывает счетчик
Не выполняется countPointLasso++;?
А где в коде у Вас countPointLasso = 0;? В приведённом примере не весь код.
Возможно где-то в коде есть обнуление и поэтому счётчик всегда показывает единицу.
Цитата Сообщение от Keramer82 Посмотреть сообщение
код я выложить пока не готов, т.к. он занимает более 2000 строк...
Выкладывайте на github, а сюда ссылку, иначе не разобраться.
1
4 / 2 / 3
Регистрация: 30.07.2019
Сообщений: 126
29.10.2019, 15:32  [ТС]
ashsvis, переменная countPointLasso встречается в программе всего 3 раза (я ее только что завел и раньше ее не было). А завел я эту переменную до конструктора.
Миниатюры
Как сделать так, чтобы линия "тянулась" за мышью?   Как сделать так, чтобы линия "тянулась" за мышью?  
0
4 / 2 / 3
Регистрация: 30.07.2019
Сообщений: 126
29.10.2019, 16:22  [ТС]
Попытался обойтись без события zoomPictureBox1_Paint. Закинул код, который там был в событие MouseMove.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
        private void zoomPictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (zoomPictureBox1.Image != null)
            {
                if (pressedLasso)
                {
                    Graphics graph = Graphics.FromImage(canvas2);
                    graph.Clear(Color.Empty);
                    NextPositionLassoScreen = zoomPictureBox1.ClientToImagePoint(e.Location);
                    Bresenham_Line(graph, Color.Violet,
                        (int)(StartPositionLassoScreen.X), (int)(StartPositionLassoScreen.Y),
                        (int)(NextPositionLassoScreen.X), (int)(NextPositionLassoScreen.Y));
 
                    Bitmap TargetBitmap = new Bitmap(canvas);
                    Graphics graph2 = Graphics.FromImage(ResultCanvas);
                    graph2.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver;
                    graph2.DrawImage(TargetBitmap, 0, 0);
                    graph2.DrawImage(canvas2, 0, 0);
                    zoomPictureBox1.UpdateImage(ResultCanvas);
                    graph2.Dispose();
                    TargetBitmap.Dispose();
 
                }
            }
        }
и тогда переменная из MouseDown стала нормально прибавляться.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        private void zoomPictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
                if (e.Button == MouseButtons.Left)
                {
                    // Вот это стало срабатывать
                    //--------------------------------------------------
                    countPointLasso++;
                    label2.Text = "Point_" + countPointLasso.ToString();
                    //--------------------------------------------------
                    if (canvas != null)
                    {
                        canvas.Dispose();
                    }
                    canvas = new Bitmap(zoomPictureBox1.Image);
                    ResultCanvas = new Bitmap(zoomPictureBox1.Image);
                    StartPositionLassoScreen = new Point(zoomPictureBox1.ClientToImagePoint(e.Location).X,
                            zoomPictureBox1.ClientToImagePoint(e.Location).Y);
                    pressedLasso = true;
                }
        }
Но теперь рисование линии проходит с большой задержкой...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.10.2019, 16:22
Помогаю со студенческими работами здесь

Когда двигается фон, то линия рамки тянется за ним. Как это убрать? И сделать так, чтобы рамки не было
from graph import * def gusenica(): brushColor("cornflowerblue") rectangle(0,y+0,400,y+400) brushColor("olive") ...

Как сделать так, чтобы при нажатии мышью на верхний квадратик над столбцом, он выбирал верхний закрашенный
Здравствуйте. Как сделать так, чтобы при нажатии мышью на верхний квадратик над столбцом, он выбирал верхний закрашенный шарик, и после...

Сделать так, чтобы форма не двигалась когда берут её мышью за название
здравствуйте, собственно сабж, Ворд ВБА, спасибо

Не знаю как сделать так чтобы как сделать так чтобы через каждые N строк таблицы выдача результатов останавливалась
from math import * a = -5 b = 10 up = 0.2 N = 15 x = a min_x = a max_x = b while a <= b: y = sin(x) + abs(sin(x))

Сделать так, чтобы при щелчке мышью на одной из фигурок управление передавалось на эту фигуру
здравствуйте, надеюсь на помощь, вопрос такой Дано игровое поле на катором расположено 20 фигурок (поле сделано в графическом редакторе),...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru