Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > найти отличие в 2 картинках


Автор: rthsobakas 5.4.2010, 22:12
Дано форма, 3 pictureBox(в 2 загружены картинки), кнопка.
Надо пройтись по всем пикселам картинок и проксорить(XOR) их, записать в 3 pictureBox значение. То есть надо найти отличие.
Код

 for (int i = 0; i <pictureBox1->Size.Height; i++)
                for (int j = 0; j <pictureBox1->Size.Width; j++)
                {
                   // Получаю цвет пиксела 1 картинки
                  // Получаю цвет пиксела 2 картинки
                  // Произвожу XOR пикселов.
                  // Вывожу в 3 картинку этот пиксел.
                }


Размеры pictureBox` ов одинаковые.

Проблема в том что я не знаю как получить значение цвета пиксела в pictureBox по определенной координате. И записать в новый.То есть то что в комментах не знаю как оформить.

Автор: Skalik 5.4.2010, 22:19
Вот так можно зарисовать определенный пиксел: 
Код

e.Graphics.FillRectangle(Brushes.Black, i, j, 1, 1);

Вот так можно получить пиксель: 
Код
Bitmap bmp = new Bitmap(pictureBox.Image);
Color color =  bmp.GetPixel(x, y);

Автор: rthsobakas 8.4.2010, 19:03
Код

Bitmap bmp1 = gcnew Bitmap(pictureBox1->Image);
Bitmap bmp2 = gcnew Bitmap(pictureBox2->Image);
Bitmap bmp3 = gcnew Bitmap(pictureBox3->Image);
 
         for (int i = 0; i <pictureBox1->Size.Height; i++)
                for (int j = 0; j <pictureBox1->Size.Width; j++)
                {                       
                    Color color1 =  bmp1.GetPixel(j, i);
                    Color color2 =  bmp2.GetPixel(j, i);
                    Color color3 =  Color.FromArgb(abs(color1.R - color2.R), abs(color1.G - color2.G), abs(color1.B - color2.B));
                    bmp3.SetPixel(j, i, color3);
                }


ошибка в

Код

Color color3 =  Color.FromArgb(abs(color1.R - color2.R), abs(color1.G - color2.G), abs(color1.B - color2.B));


Цитата

: error C2275: System:rawing::Color: недопустимое использование этого типа в качестве выражения
1> d:\windows\microsoft.net\framework\v2.0.50727\syst em.drawing.dll: см. объявление 'System:rawing::Colo
r'
что она значит?

Автор: rthsobakas 11.4.2010, 10:26
Если так сделать(C++ Код)

Код

Color color3 =  System::Drawing::Color::FromArgb(abs(color1.A - color2.A),abs(color1.R - color2.R), abs(color1.G - color2.G), abs(color1.B - color2.B));  



То 

Цитата

Необработанное исключение типа "System.NullReferenceException" произошло в System.Drawing.dll

Кто-нибудь знает как с этой ошибкой бороться?


http://msdn.microsoft.com/ru-ru/library/system.nullreferenceexception.aspx
тут,нашел но так и не понял суть

Цитата

Исключение, возникающее при попытке разыменования указателя NULL на объект.

Пространство имен: System
Сборка: mscorlib (в mscorlib.dll)

Автор: rthsobakas 11.4.2010, 10:57
вот код. Можете посмотреть? Почему различие не выделяет.

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