Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Медленная функция Bitmap.SetPixel(x, y, clr);


Автор: Afrodiziac 23.8.2007, 08:14
Здравствуйте!

По заданию лабораторной работы, мне необходимо написать программу визуализации некоторой, параметрически заданной поверхности, с возможность заливки ее методами Гуро и Фонга, а также текстурированием.

Задание я выполнил:

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

Код

bitmap.SetPixel(x, y, clr);


значительно увеличивается время визуализации. 

Как на C# можно решить эту проблему?

На сколько я понимаю есть средство под названием DIB (Device Independent Bitmap) заключающееся в том, что мы изменяем соответсвующие байты в уже  "левом" битмапе, а потом выводим его в свой графикс. То есть вся работа происходит с памятью. Но как это реализовать в C#? 

А может имеется координально другой вариант??

Если геометрический объект сделать большим. и попытаться текстурировать его... то время ожидания визулизации одного(!) кадра превышает 8 минут, я не выдержал и остановил вычисления.

С Гуро и Фонгом легче, работают быстрее, но все равно невозможно с "легкостью" вращать объект. Тормозит.

PS: GDI+ категорически запрещается использовать (всякие градиентные заливки).

Автор: ivashkanet 23.8.2007, 09:33
http://forum.vingrad.ru/index.php?show_type=forum&showtopic=95499

Автор: archeg 23.8.2007, 10:06
Где такие лабораторные работы дают??  smile 
Ну почему только у нас в университете лаб. роботы - скучный поиск кратчайшего пути по графу

Автор: ivashkanet 23.8.2007, 10:11
 smile 
archeg, ага, я тоже "всплакнул". Правда у нас и графов-то не было.

Автор: Idsa 23.8.2007, 10:21
Курс лекций по работе с графикой есть, наверное, на всех прогерских факультетах. Другое дело, что некоторые рисуют в Paint'е (в лучшем случае - в Фотошопе)... а те, у кого препод продвинутый, занимаются вещами посерьезнее...

Автор: ivashkanet 23.8.2007, 10:27
! Заканчиваем флейм !
P.S. Это ко мне тоже относится.

Автор: Afrodiziac 23.8.2007, 14:44
Отлично! Работает! Гораздо быстрее работает!
Гуро почти мометально!

Собственная функция установки значения пикселя (для интересующихся людей):
Код

    ...
    int W = data.Stride;
    int H = data.Height;

    private void SetPixel(int x, int y, Color color)
    {
      long coord = W * (y - 1) + 4 * x;
      ByteArray[coord]     = color.B;
      ByteArray[coord + 1] = color.G;
      ByteArray[coord + 2] = color.R;
      ByteArray[coord + 3] = color.A;
    }


Огромное Спасибо за помощь!

Автор: ivashkanet 23.8.2007, 14:47
Afrodiziac, не за что. Заходи ещё ;-)

P.S. Так как проблема решена, не мог бы рассказать что это за вуз, какая специальность,... 
Уж очень все заинтересовались.

Автор: Afrodiziac 23.8.2007, 15:01
Цитата(archeg @  23.8.2007,  10:06 Найти цитируемый пост)
Где такие лабораторные работы дают?? 


Город: Уфа 
Университет: Уфимский Государствнный Авиационный Технический Университет (УГАТУ)
Кафедра: Вычислительной Математики и Кибернетики (ВМиК)
Специальность: Математическое Обеспечение и Администрирование Информационных Систем (МО)
Дисциплина: Интерактивные графические системы
Преподаватель: профессор Верхотуров М. А.
vmk.ugatu.ac.ru/verhotur.htm (4 курс)

Цитата(archeg @  23.8.2007,  10:06 Найти цитируемый пост)
Ну почему только у нас в университете лаб. роботы - скучный поиск кратчайшего пути по графу 


=) Многие вылетели из-за нашего препода из университета.  Кто остался, не желают с ним встречаться. Зверь он)

Поэтому я лабы делаю заранее, тока этой осенью надо бует сдавать =) иначе крышка, отчеты требует идеальные.

Автор: Idsa 23.8.2007, 15:14
Цитата(Afrodiziac @  23.8.2007,  15:01 Найти цитируемый пост)
=) Многие вылетели из-за нашего препода из университета.  Кто остался, не желают с ним встречаться. Зверь он)

Поэтому я лабы делаю заранее, тока этой осенью надо бует сдавать =) иначе крышка, отчеты требует идеальные. 

Ну раз все так серьезно... обращайся, не стесняйся - всегда поможем smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)