2012-01-23 5 views
2

В этом случае я хочу инвертировать цвета с помощью этого метода, как бы я это сделал? Я знаю, что нужно вычесть 255 (но место я делаю это, очевидно, неправильно. Он просто продолжает давать мне оттенки серого цвета, которые я не хочу)Инвертировать цвета на WinForms

 for (int x = 0; x < bmp.Width; x++) 
     { 
      //set the new image's pixel to the invert version 

      nRow[x * pixelSize] = (byte)(255 - nRow[x + 0]); //B 
      nRow[x * pixelSize + 1] = (byte)(255 - nRow[x + 1]); //G 
      nRow[x * pixelSize + 2] = (byte)(255 - nRow[x + 2]); //R 
     } 
+0

Просто пт om, глядя на него (без понимания вашего кода): is 'nRow [0]' означает 'nRow [x]'? – annonymously

+0

Woops, yup, я играл с ним и забыл изменить его обратно. Я исправлю это. – BigBug

+0

Что происходит, когда вы вводите красный пиксель? ('FF0000') – annonymously

ответ

2

Попробуйте это:

 nRow[x * pixelSize] = (byte)(255 - oRow[x * pixelSize + 0]); //B 
     nRow[x * pixelSize + 1] = (byte)(255 - oRow[x * pixelSize + 1]); //G 
     nRow[x * pixelSize + 2] = (byte)(255 - oRow[x * pixelSize + 2]); //R 
+0

хм ... это почти то же самое, что и последнее изображение, которое я разместил. единственная разница в том, что синяя часть теперь превратилась в красный цвет ... вы все равно можете видеть эту часть изображения, хотя ... другая часть экрана черная еще – BigBug

+0

ahah, вы ее получили. Спасибо, что нашли время и помогли. +1 и выбранный ответ. – BigBug

+0

+1 для просмотра очевидного :) – basti

1

Вы должны изменить вычитание этого

   for (int x = 0; x < bmp.Width; x++) 
      { 
       //set the new image's pixel to the invert version 

       nRow[x * pixelSize] = (byte)(255 - oRow[x]); //changed from nRow to oRow 
       //you subtracted every line three times? 
      } 

насколько я понимаю, вы вычитали новую картину из новой картины;)

+0

Хм, он не работает ... он по-прежнему дает мне изображение в оттенках серого ... также, это не обычное изображение в оттенках серого ... теперь по нему проходят вертикальные линии, по какой-то причине ... – BigBug

+0

Что, если вы включите его? (байт) (oRow [x + 0] -255) И: Измените его для тестовых причин для моего обновленного кода. – basti

+0

Хмм, ладно, я изменил его, так что это oRow и я скопировал (изменил x + 1 и x + 2 соответственно) ... теперь он дает светло-серый вариант изображения .. но есть так много вертикальные линии, которые ... я больше не могу разобрать изображение ... нет цвета вообще =/ – BigBug

Смежные вопросы