Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Замена одного цвета в Bitmap`е на другой, как заменить все пиксели чёрного цвета  
:(
    Опции темы
albert21
  Дата 8.5.2008, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Всем привет.

Есть Bitmap, необходимо в нём все пиксели чёрного цвета выкрасить в цвет, переданный в качестве параметра. Помогите плиз.
--------------------
http://www.certifications.ru/publicresults.php?tu_id=45939
PM MAIL   Вверх
mr.DUDA
Дата 8.5.2008, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


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

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



Вот простейшее решение:
Код
        void ПерекраситьБитмап(Bitmap bmp, Color color)
        {
            for (int y = 0; y < bmp.Height; y++)
            {
                for (int x = 0; x < bmp.Width; x++)
                {
                    if (bmp.GetPixel(x, y) == Color.Black)
                        bmp.SetPixel(x, y, color);
                }
            }
        }

Есть ещё решение с ColorMatrix и рисованием в графикс, но лень переделывать. А ещё можно залочить пикселы с пом. LockBits и проходить по плоскому массиву, но тоже лень.  smile 


--------------------
user posted image
PM MAIL WWW   Вверх
albert21
Дата 8.5.2008, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Простейшее решение слишком медленное  smile. Я как раз расчитывал на что-то поинтереснее.
--------------------
http://www.certifications.ru/publicresults.php?tu_id=45939
PM MAIL   Вверх
mr.DUDA
Дата 8.5.2008, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


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

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



Ну что же... вот другой пример:
Код
using System.Drawing;
using System.Drawing.Imaging;

...

        unsafe void ПерекраситьБитмапМетодомКтулху(Bitmap bmp, Color color)
        {
            int colorVal = color.ToArgb();
            BitmapData bmData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
            int *colors = (int*)(bmData.Scan0.ToPointer());
            for (int i = 0; i < bmp.Width * bmp.Height; i++, colors++)
            {
                if ((*colors & 0x00ffffff) == 0)
                    *colors = colorVal;
            }
            bmp.UnlockBits(bmData);
        }


В настройках проекта нужно включить чекбокс "Allow unsafe code".


--------------------
user posted image
PM MAIL WWW   Вверх
500mhz
Дата 8.5.2008, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

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



именно заменить или отобразить на форме измененными?


--------------------

PM MAIL ICQ   Вверх
mr.DUDA
Дата 8.5.2008, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


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

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



(оффтоп)
500mhz, тебя случайно не oleg1973 зовут ? smile 


--------------------
user posted image
PM MAIL WWW   Вверх
albert21
Дата 9.5.2008, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Отобразить на форме изменёнными. 

Включение чекбокса "Allow unsafe code" не помогло. Пишет ошибку "Pointers and fixed size buffers may only be used in an unsafe context"
--------------------
http://www.certifications.ru/publicresults.php?tu_id=45939
PM MAIL   Вверх
500mhz
Дата 9.5.2008, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шайтан
***


Профиль
Группа: Завсегдатай
Сообщений: 1017
Регистрация: 5.5.2008
Где: Киев / Italy

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



mr.DUDA, 
угадал шайтан ))) память хорошая у тебя )))


--------------------

PM MAIL ICQ   Вверх
mr.DUDA
Дата 9.5.2008, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


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

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



albert21, в объявлении метода, который выполняет код с указателями, нужно поставить ключевое слово unsafe.

500mhz, превед!  smile 
как там борьба с касторским ?
вирусов понаписали уже ?  smile  smile  smile 


--------------------
user posted image
PM MAIL WWW   Вверх
albert21
Дата 10.5.2008, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо, всё получилось. С чёрно-белой картинкой это не проватывает.
--------------------
http://www.certifications.ru/publicresults.php?tu_id=45939
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

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


 




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


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

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