Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2014, 11:54   #1
IT-Lopata
7 - классник
Форумчанин
 
Аватар для IT-Lopata
 
Регистрация: 27.03.2014
Сообщений: 181
По умолчанию Алгоритм Blur

На формочку кинул PictureBox, загрузил картинку, для нее написал вот такой Blur, но он слишком долго размазывает и нужно несколько раз нажимать кнопку чтобы сильно размазать изображение. Как можно его убыстрить?

Код:
       private void button1_Click(object sender, EventArgs e)
        {
            Bitmap bm = (Bitmap)pictureBox1.Image;

            int w = bm.Width;
            int h = bm.Height;

            // horizontal blur
            for (int i=1; i<w-1; i++)
                for (int j = 0; j < h; j++) 
                {
                    Color c1 = bm.GetPixel(i-1, j);
                    Color c2 = bm.GetPixel(i, j);
                    Color c3 = bm.GetPixel(i+1, j);


                    byte bR = (byte)((c1.R + c2.R + c3.R) / 3);
                    byte bG = (byte)((c1.G + c2.G + c3.G) / 3);
                    byte bB = (byte)((c1.B + c2.B + c3.B) / 3);


                    Color cBlured = Color.FromArgb(bR, bG, bB);

                    bm.SetPixel(i, j, cBlured);

                }

            //vertical blur
            for (int i = 0; i < w ; i++)
                for (int j = 1; j < h-1; j++)
                {
                    Color c1 = bm.GetPixel(i, j-1);
                    Color c2 = bm.GetPixel(i, j);
                    Color c3 = bm.GetPixel(i, j+1);


                    byte bR = (byte)((c1.R + c2.R + c3.R) / 3);
                    byte bG = (byte)((c1.G + c2.G + c3.G) / 3);
                    byte bB = (byte)((c1.B + c2.B + c3.B) / 3);


                    Color cBlured = Color.FromArgb(bR, bG, bB);

                    bm.SetPixel(i, j, cBlured);

                }


            pictureBox1.Refresh();

        }
IT-Lopata вне форума Ответить с цитированием
Старый 29.03.2014, 12:38   #2
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Быстрое размытие по Гауссу
Streletz вне форума Ответить с цитированием
Старый 29.03.2014, 13:16   #3
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

особенно GetPixel() - нафиг. Используй LockBits().
Smogg вне форума Ответить с цитированием
Старый 29.03.2014, 14:49   #4
IT-Lopata
7 - классник
Форумчанин
 
Аватар для IT-Lopata
 
Регистрация: 27.03.2014
Сообщений: 181
По умолчанию

Цитата:
Быстрое размытие по Гауссу
Это тоже гаус? это быстрое нет ? тут просто более понятно что и как. видно как пиксели смешиваются.
http://www.gamerendering.com/2008/10...filter-shader/

Цитата:
Используй LockBits().
ок, спс, я и не подозревал о такой штуке.
http://msdn.microsoft.com/ru-ru/libr...v=vs.110).aspx

щас уже инвертирую каналы с помощью нее, все достаточно быстро. думаю теперь как мне достать соседние пиксели в строке и столбике для замешивания. если опять все быстро будет можно ширину и высоту смешивания увеличить, а не количество пассов.
IT-Lopata вне форума Ответить с цитированием
Старый 29.03.2014, 14:58   #5
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
тут просто более понятно что и как. видно как пиксели смешиваются.
"Просто и понятно" ещё не значит эффективно.
Цитата:
это быстрое нет ?
Измерьте быстродействие. Не качественно
Цитата:
слишком долго размазывает
, а количественно. На основании результатов измерений выберите лучший вариант.
Streletz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jQuery. Blur на div. Как сделать? Mr_freeman JavaScript, Ajax 2 24.01.2013 15:55
Разработайте алгоритм методом пошаговой детализации и программу, реализующую этот алгоритм iamhated Помощь студентам 1 14.01.2012 16:22
Гауссово размывание (Gaussian Blur) в Delphi нужно сделать готовую прогу Art-1989 Помощь студентам 0 19.04.2011 09:10
Blur в Direct3D notHaker Мультимедиа в Delphi 7 27.08.2010 00:22