![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| libman |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 31.10.2006 Репутация: нет Всего: нет |
Задача стоит так, необходимо подсчитать количество цветов которые встречаются в картинке. Использую следующий код. Т.к. я не самый великий программист в этом мире то и скорость работы не велика, что можете подсказать для увеличения быстродействия. Мой код ниже.
Есть мысль попробовать с несколькими потоками или я не прав? Color[] masOfColor = new Color[256]; Bitmap bmp = new Bitmap(@"test.gif"); int NumberOfLast = 0; for (int x = 0; x < bmp.Height; x++) { for (int y = 0; y < bmp.Width; y++) { Color c = bmp.GetPixel(y, x); bool flag = false; for (int i = 0; i < NumberOfLast; i++) { if (c == masOfColor[i]) flag = true; } if (flag==false) { masOfColor[NumberOfLast] = c; if (NumberOfLast<masOfColor.Length) { NumberOfLast++; } } } } |
|||
|
||||
| libman |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 31.10.2006 Репутация: нет Всего: нет |
Извеняюсь за опечатку в названии темы не Jig а Gif
|
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 22 Всего: 48 |
всё намного проще: bmp.Palette.Entries.Length вернёт тебе кол-во цветов для индексированных битмапов. GIF как раз-таки индексированный формат.
Добавлено @ 00:06 после тестов стало ясно, что размер палитры для GIF всегда есть спенень двойки, даже если цветов меньше. вот решение:
помимо всего прочего, пример можно адаптировать для подсчёта кол-ва вхождений определённого цвета, что уже делается, но не возвращается в качестве результата. Добавлено @ 00:09 для проекта надо разрешить unsafe код: Project Properties -> Build -> Allow unsafe code -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
Хороший пример.
cully, ты не мог бы прокомментировать его? Я в графике не силен, хотелось бы подъучиться... в принципе, вот эту часть
-------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| stab |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1839 Регистрация: 1.1.2003 Репутация: 22 Всего: 48 |
битмап в формате 8bppIndexed, т.е. один пиксель - один байт, значение этого байта и используется для индексации в массиве счётчиков. переход к следующему скану, data.Stride - обычно равно Width * (размер одного пикселя в байтах), но не всегда, т.к. может быть выравнивание или битмап может быть окном в другой битмап. -------------------- 6, 6, 6 - the number of the beast. |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
блин, полчаса пялился в твои строчки... И понял!!!
Спасибо! Круто, действительно круто... -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| libman |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 31.10.2006 Репутация: нет Всего: нет |
Огромое спасибо
Еще маленький вопрос. как сделать так что бы можно было определить на какой стадии находится выполнение. Т.е. как в методе который вы написали public static unsafe byte CountColors(Bitmap bitmap), заставить двигаться полоску в компоненте progressBar который мы кинули на форму? |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |