Поиск:

Ответ в темуСоздание новой темы Создание опроса
> усреднение цвета в битмапе 
:(
    Опции темы
4ybaka
Дата 1.6.2007, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 28.4.2007

Репутация: нет
Всего: нет



есть исходный битмап,из него получаем другой,в кот каждый пиксель(или группа) имеют цвет = среднему цвету группы пикселей в исходном.попробывал просто перебором,так он минут 8 считал....  smile ктонибудь знает такой алгоритм?


--------------------
"То,что вы понимаете - это все,что вы понимаете."
 Брайн Керниган
PM MAIL WWW   Вверх
Earnest
Дата 4.6.2007, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 7
Всего: 183



Если ты каждый пиксел получаешь через GetPixel или что-то вроде, можно и дольше считать.
Особенно, учитывая что пикселы опрашиваются многократно. 
Если группа, по которой нужно усреднять - это квадратная матрица заданного размера, то работай с полосами, высотой в эту матрицу: полоса == N указателей на строки в формате RGB, организована как кольцевой буфер (чтобы строки многократно не читать). Естественно, заполнение полосы не через GetPixel нужно делать, а прямым чтением памяти. Если битмап не очень большой, можно его целиком прочитать в буфер.
Дальше маска скользит по полосе горизонтально, подсчитывая средние значения. Можно еще оптимизировать, запоминая частичные суммы по столбцам, чтобы не считать их многократно).
Запись в результирующий битмап - тоже не через SetPixel, а прямо в память, строками.



--------------------
...
PM   Вверх
4ybaka
Дата 5.6.2007, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 28.4.2007

Репутация: нет
Всего: нет



а каким классом можно напрямую работать с файлами (на C#)?


--------------------
"То,что вы понимаете - это все,что вы понимаете."
 Брайн Керниган
PM MAIL WWW   Вверх
Earnest
Дата 7.6.2007, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 7
Всего: 183



Про C# спраси в соответствующем разделе.
Но если хочешь быстро, то придется писать самому, напрямую работать с битами и т.д. 


--------------------
...
PM   Вверх
ivashkanet
Дата 7.6.2007, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: нет
Всего: 149



Цитата(mr.DUDA @  11.5.2006,  09:48 Найти цитируемый пост)
Картинку можно залочить в IntPtr, откуда скопировать в байтовый массив и работать с ним напрямую. Это будет в несколько раз быстрее, чем GetPixel / SetPixel. Но при этом нужно знать, в каком байте что лежит.

http://forum.vingrad.ru/index.php?showtopi...st&p=727772
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0432 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.