2015-11-29 4 views
0

Я должен сделать n раундов сортировки по строке пикселя буферизованного изображения, прокручивая каждую строку и сравнивая яркость текущего пикселя с тем, который находится слева от текущего пикселя. Если яркость тока меньше, чем одна слева, мне нужно поменять цвета пикселей. Это мой текущий код.Обмен цветами двух пикселей

BufferedImage result = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_RGB); 
    for (int m = 0; m<n;m++){ 
      for (int y=0;y<img.getHeight();y++){ 
       for(int x =1; x<img.getWidth();x++){ 
       int temp = img.getRGB(x-1,y); 
       int temp2 = img.getRGB(x, y); 
       int gr = (int)brightness(temp); 
       int gr2 = (int)brightness(temp2); 
       if(gr2<gr){ 
        result.setRGB(x, y, rgbColour(temp2,temp2,temp2)); 
        result.setRGB(x-1, y, rgbColour(temp,temp,temp)); 
       } 
      } 
    } 
    } 

Методы, которые я получил, следующие.

public static int getRed(int rgb) { return (rgb >> 16) & 0xff; } 
public static int getGreen(int rgb) { return (rgb >> 8) & 0xff; } 
public static int getBlue(int rgb) { return rgb & 0xff; } 
public static int rgbColour(int r, int g, int b) { 
    return (r << 16) | (g << 8) | b; 
} 
public static double brightness(int rgb) { 
    int r = getRed(rgb); 
    int g = getGreen(rgb); 
    int b = getBlue(rgb); 
    return 0.21*r + 0.72*g + 0.07*b; 
} 

public static BufferedImage convertToGrayscale(BufferedImage img) { 
    BufferedImage result = new BufferedImage(
      img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_RGB 
     ); 
    for(int x = 0; x < img.getWidth(); x++) { 
     for(int y = 0; y < img.getHeight(); y++) { 
      int col = img.getRGB(x, y); 
      int gr = (int)brightness(col); 
      result.setRGB(x, y, rgbColour(gr, gr, gr)); 
     } 
    } 
    return result; 
} 
+2

И каков ваш вопрос? –

+0

Кажется, что я делаю, это не дает мне желаемого результата. – JClutch

+0

'for (int m = 0; m

ответ

0

Вы не переключая значения должным образом после сравнения:

for(int x =1; x<img.getWidth();x++){ 
    int temp = img.getRGB(x-1,y); 
    int temp2 = img.getRGB(x, y); 
... 
    if (gr2 < gr) { 
     result.setRGB(x, y, rgbColour(temp2,temp2,temp2)); // same as in img 
     result.setRGB(x-1, y, rgbColour(temp,temp,temp)); // same as in img 
    } 
} 

Попробуйте это, если-пункт вместо:

... 
    if (gr2 < gr) { // swap values in result 
     result.setRGB(x-1, y, rgbColour(temp2,temp2,temp2)); 
     result.setRGB(x, y, rgbColour(temp,temp,temp)); 
    } else { // keep values in result same as in img 
     result.setRGB(x, y, rgbColour(temp2,temp2,temp2)); 
     result.setRGB(x-1, y, rgbColour(temp,temp,temp)); 
    } 

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

  • Нет связанных вопросов^_^