2015-03-27 3 views
5

Я пытаюсь XOR некоторые значения с значениями RGB моего изображения, сохранять это изображение и делать шаги назад, чтобы получить исходное изображение. Проблема в том, что я не знаю, почему я получаю непонятный (с некоторым шумом) образ. Вот мой код, и изображение ниже:Получение неправильных цветов после манипуляций с изображениями

Bitmap original = new Bitmap("D:\\img\\1.jpg"); 
Bitmap inp_bmp = new Bitmap("D:\\img\\1.jpg"); 

int width = inp_bmp.Width; 
int height = inp_bmp.Height; 
Color pixel; 

for (int y = 0; y < height; y += 1) 
{ 
    for (int x = 0; x < width; x += 1) 
    { 
     pixel = inp_bmp.GetPixel(x, y); 

     int a = pixel.A; 
     int r = (pixel.R^(1000))%256; 
     int g = (pixel.G^(185675))%256; 
     int b = (pixel.B^(78942))%256; 
     inp_bmp.SetPixel(x, y, Color.FromArgb(a, r, g, b)); 


    } 
} 

pictureBox2.Image = inp_bmp; 
pictureBox1.Image = original; 
inp_bmp.Save("D:\\img\\4.jpg"); 

После изображение было сохранено, меняю

Bitmap inp_bmp = new Bitmap("D:\\img\\1.jpg"); 

для

Bitmap inp_bmp = new Bitmap("D:\\img\\4.jpg"); 

и удалить

//inp_bmp.Save("D:\\img\\4.jpg"); 

, и я получаю изображение, подобное

enter image description here

(слева оригинал, справа - результат); Как вы можете видеть, я получаю неправильные цвета на рисунке 4, почему? В целом это близко к оригиналу, но все же это не так.

+0

Я редактировал свой титул. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

+0

Ваш код отлично работает здесь с реальными jpeg. Можете ли вы опубликовать исходное изображение? – TaW

+0

Здесь сэр - http://i62.tinypic.com/20jqrea.jpg –

ответ

3

Okey, я нашел проблему. Проблема заключалась в сохранении изображения.

Это помогло:

inp_bmp.Save("D:\\img\\4.png", System.Drawing.Imaging.ImageFormat.Png); 
0

Я предполагаю, что ваше изображение не использует 8-битные цвета. % 256 предполагает, что у вас есть 8-битное изображение.

+1

с использованием% 256, как int r = (pixel.R^220); int g = (pixel.G^255); int b = (pixel.B^206); еще одна проблема –

+0

jpeg всегда имеет 8-битные цветовые компоненты. Фактически, все веб-изображения делают, насколько я знаю. – Nyerguds

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