Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/23: Рейтинг темы: голосов - 23, средняя оценка - 4.91
2 / 2 / 0
Регистрация: 01.07.2011
Сообщений: 29

подскажите, что рисует быстрее GDI+...

06.07.2011, 18:18. Показов 5158. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно, прорисовка тормозит. Отображается около 800 объектов, картинка перерисовывается секунд 6... это долго.
Вот. Буду очень признателен, если кто-то подскажет.

Добавлено через 47 минут
Графика растровая... нужно что-то, с примерно таким же функционалом (например, с методом, аналогичным FillPolygon). Если такое есть, конечно)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.07.2011, 18:18
Ответы с готовыми решениями:

Есть ли в WPF полноценная замена GDI+? Чтобы можно было всё, что можно в GDI+? Просто думаю углубляться в работу с изображениями в WPF или GDI.
Ну собственно весь вопрос в заголовке темы.

Что быстрее GDI+ или Canvas
Ну собственно говоря в теме почти все сказал. Дело обстоит на XE мне кажется что вывод изображений у них на ровне а вот примитивы остальные...

Не рисует подскажите что делать?
У меня возникла проблема не рисует линии,подскажите пожалуйста что это может быть. #include <GL/glut.h> void display() { ...

28
2 / 2 / 0
Регистрация: 01.07.2011
Сообщений: 29
08.07.2011, 02:06  [ТС]
Студворк — интернет-сервис помощи студентам
Споров развели... нападки еще какие-то...
taras atavin, 800 объектов взял для примера... окно ведь не обязательно 800x600. Кроме того, там рисуются не только линии, полигоны и надписи, но еще и туча текстур из bmp-шек... Код оптимизировал как мог, расчеты все проскакивают за милисекунды.
Всем спасибо за идеи, дальше все зависит от меня.
0
2 / 2 / 0
Регистрация: 01.07.2011
Сообщений: 29
08.07.2011, 04:52  [ТС]
Так, внимание... отрубил прорисовку полигонов и полилиний, оставил только прорисовку точек... Каждая точка представлена небольшой картинкой (например, автомойка или пожарная часть). Так вот, скорость прорисовки осталась прежней... 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
public void прорисовка_точек()
        {
            for (int i = 0; i < лист_точек.Count; i++)
            {
                //Data0
                if (((лист_точек[i] as ArrayList)[4] as ArrayList).Count != 0)
                {
                    уровни определение_уровня = new уровни(s, (лист_точек[i] as ArrayList)[3].ToString(), 4);
                    if (определение_уровня.рисуем == true)
                    {
                        string type = (лист_точек[i] as ArrayList)[1].ToString();
                        Кисти_точек точки = new Кисти_точек(type);
                        for (int k = 0; k < ((лист_точек[i] as ArrayList)[4] as ArrayList).Count; k++)
                        {
                            PointF point = (((лист_точек[i] as ArrayList)[4] as ArrayList)[k] as List<PointF>)[0];
                            преобразование_координат координаты_старые = new преобразование_координат(point.X, point.Y, коэф_старый.max_x, коэф_старый.max_y, коэф_старый.K_x, коэф_старый.K_y);
                            point.X = (float)((новый.max_x_new - координаты_старые.xn) * новый.K_x_new * s);
                            point.Y = (float)((новый.max_y_new - координаты_старые.yn) * новый.K_y_new * s);
                            G.DrawImage(точки.bitm, point.X, point.Y, курсоры.bitm.Width, курсоры.bitm.Height);                          
                        }
                    }
                }
            }
        }
Кисти точек - структура, которая выглядит так (взял кусок от кода, дальше аналогично):
C#
1
2
3
4
5
6
7
8
9
10
11
12
struct Кисти_точек
    {
        public Bitmap bitm;
        public Кисти_точек(string type)
            : this()
        {
            switch (type)
            {
                #region Автотранспорт
                case "0x2F0B":
                    bitm = new Bitmap(WindowsFormsApplication5.Properties.Resources.autorepair1);                 
                    break;
Тормозит по прежнему на макс. уровне детализации, скорость отрисовки 3 секунды... Приложил рисунок, чтобы показать, как это выглядит (на этапе теста там все иконки одинаковые...)
Миниатюры
подскажите, что рисует быстрее GDI+...  
0
2 / 2 / 0
Регистрация: 01.07.2011
Сообщений: 29
08.07.2011, 06:46  [ТС]
Параметры уровня детализации еще можно поменять, тогда их так много не будет (в экран не влезут)... Но тормозит все равно так же.

Добавлено через 1 час 29 минут
Оо Допер, извиняюсь... у меня проверка была не включена для точек на попадание в область экрана. Они там все где-то рисовались за границей, а их ого-го... отсюда тормоза. Плюс битмап каждый раз создавался при выборе структуры... исправил следующим образом:
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
public void прорисовка_точек()
        {
            for (int i = 0; i < лист_точек.Count; i++)
            {
                //Data0
                if (((лист_точек[i] as ArrayList)[4] as ArrayList).Count != 0)
                {
                    уровни определение_уровня = new уровни(s, (лист_точек[i] as ArrayList)[3].ToString(), 4);
                    if (определение_уровня.рисуем == true)
                    {
                        string type = (лист_точек[i] as ArrayList)[1].ToString();                        
                        for (int k = 0; k < ((лист_точек[i] as ArrayList)[4] as ArrayList).Count; k++)
                        {
                            PointF point = (((лист_точек[i] as ArrayList)[4] as ArrayList)[k] as List<PointF>)[0];
                            преобразование_координат координаты_старые = new преобразование_координат(point.X, point.Y, коэф_старый.max_x, коэф_старый.max_y, коэф_старый.K_x, коэф_старый.K_y);
                            point.X = (float)((новый.max_x_new - координаты_старые.xn) * новый.K_x_new * s);
                            point.Y = (float)((новый.max_y_new - координаты_старые.yn) * новый.K_y_new * s);
                            Rectangle rect = new Rectangle(Convert.ToInt32(point.X),Convert.ToInt32(point.Y),1,1);
                            if (проверка(this.Width, this.Height, point.X, point.Y) == true)
                            {
                                Кисти_точек точки = new Кисти_точек(type);
                                G.DrawImage(точки.bitm, point.X, point.Y, точки.bitm.Width, точки.bitm.Height);
                            }
                           прорисовка_надписей_точек(point, ((лист_точек[i] as ArrayList)[2].ToString()));
                        }
                    }
                }
            }
        }
Сама функция проверки вот такая:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public bool проверка(int Width, int Height, float x, float y)
        {
            float x_ = x - hScrollBar1.Value * s;
            float y_ = y - vScrollBar1.Value * s;
            float width_ = Width - (x - hScrollBar1.Value * s);
            float height_ = Height - (y - vScrollBar1.Value * s);
            if (x_ >= 0 & y_ >= 0 & width_ >= 0 & height_ >= 0)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
Теперь рисуется около секунды. Таймер не засекал, но тормоза исчезли.
Всем спасибо еще раз.
0
Мохаммед Али
 Аватар для asd321
131 / 70 / 5
Регистрация: 14.08.2009
Сообщений: 916
08.07.2011, 08:49
а двойную буферизацию применяли?, может еще ускориться
0
 Аватар для m0nax
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
08.07.2011, 09:37
еще можно убрать все as из кода, в текущем виде они бесполезны
0
2 / 2 / 0
Регистрация: 01.07.2011
Сообщений: 29
08.07.2011, 09:51  [ТС]
Применял... в скорости разницу не заметил, просто изображение мигать перестало.
Так, еще один вопрос появился. Из одной программы выдрал файлы иконок в формате курсоров (.cur). При использовании метода Cursor.Draw это дело дюже тормозит, если их больше десятка. Как можно посмотреть "потроха" этого метода? Немного непонятно, как этот курсор рисуется... Пробовал конвертировать в bmp, как-то странно конвертируется, изображение невзрачным становится и плохо видимым. А жаль, при использовании bmp все летает, загляденье.
m0nax, я не большой знаток, но без as оно работать не хочет.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,874
08.07.2011, 10:51
формат файла иконок имеет в себе две картинки (маска и само изображение)
и при помощи логических операций создается картинка как бы прозрачная
примерно то же и у курсоров но алгоритм рисования несколько отличается
попробуй иконки(*.ico)
1
 Аватар для body90
467 / 344 / 19
Регистрация: 26.05.2009
Сообщений: 2,696
08.07.2011, 14:00
Начнем с того, что bmp даже прозрачность не поддерживает. Можно попробовать конвертировать в png с хорошим цветовым пространством. Должно получиться.
1
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
09.07.2011, 14:04
Цитата Сообщение от Alasar Посмотреть сообщение
m0nax, я не большой знаток, но без as оно работать не хочет.
Может так?
C#
1
2
3
    if (((ArrayList)((ArrayList)лист_точек[i])[4]).Count != 0)
           {
           }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.07.2011, 14:04
Помогаю со студенческими работами здесь

С++2010 и GDI+ не рисует многоугольник
Подскажите, пожалуйста, в чем причина того, что на данном объекте Graphics-наследнике класса Image с именем g, текст выводится исправно,...

Эх, стену рисует, не знаю как сделать ее красненькой! Подскажите куда и что надо вставить!
В общем было задание нарисовать кирпичную стену! Я саму стену сделала не знаю как сделать ее красной! Подскажите rjadi =...

Графика - рисует не ту фигуру, что задана в матрице. Подскажите - где и в чем ошибка. Код написан
Подскажите, пожалуйста! Пишу лубораторную работу по компьютерной графике. Дано задание написать программу в билдере, где нужно...

Запуск процесса что лучше? что быстрее? что надежнее? Winexec CreateProcess ShellExecute
Здравствуйте , какую функцию лучше использовать для программного запуска процесса winexec CreateProcess ShellExecute ? В чем...

GDI игра , подскажите!
Создавал тему Игра средствами DirectDraw никто не помог, делаю с помощью GDI сам.Возник вопрос Суть вопроса в следующем: игра Шарики....


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru