2014-02-05 3 views
3

У меня есть двумерный массив двойников, который является фильтрованным значением изображения. Я хочу преобразовать этот массив обратно в BufferedImage. Как можно отличить double[][] до BufferedImage?Преобразование 2D-массива удвоений в BufferedImage

BufferedImage b = new BufferedImage(arr.length, arr[0].length, 3); 
    Graphics c = b.getGraphics(); 


    PrintWriter writer = new PrintWriter("the-file-name.txt", "UTF-8"); 
    for(int i=0; i< arr.length; i++){ 
     for (int j=0; j<arr[0].length; j++){ 
      c.drawString(String.valueOf(arr[i][j]), i, j); 
      writer.print(arr[i][j]+" \t"); 
     } 
     writer.println(); 
    } 

    ImageIO.write(b, "jpg", new File("CustomImage.jpg")); 
    System.out.println("end"); 

Когда я создаю файл-name.txt в matlab с imshow, я вижу свое отфильтрованное изображение. Однако CustomImage.jpg содержит только один цвет. Любая идея почему?

результат с c.drawString (String.valueOf (обр [я] [J]), I, J): enter image description here

c.drawString (String.valueOf (обр [я] [J]), 0+ (я * 10), 0+ (J * 10)): enter image description here

Matlab PLOR двойник обр первого двойного массивов и второго начального серого масштабируемого изображения: enter image description here

+0

Интересно, что '3.141592659' выглядит как пиксель –

ответ

5

Вашего код

BufferedImage b = new BufferedImage(arr.length, arr[0].length, 3); 
Graphics c = b.getGraphics(); 

for(int i = 0; i<arr.length; i++) { 
    for(int j = 0; j<arr[0].length; j++) { 
     c.drawString(String.valueOf(arr[i][j]), 0+(i*10), 0+(i*10)); 
    } 
} 
ImageIO.write(b, "Doublearray", new File("Doublearray.jpg")); 
System.out.println("end"); 

После Рефакторинга

int xLenght = arr.length; 
int yLength = arr[0].length; 
BufferedImage b = new BufferedImage(xLenght, yLength, 3); 

for(int x = 0; x < xLenght; x++) { 
    for(int y = 0; y < yLength; y++) { 
     int rgb = (int)arr[x][y]<<16 | (int)arr[x][y] << 8 | (int)arr[x][y] 
     b.setRGB(x, y, rgb); 
    } 
} 
ImageIO.write(b, "Doublearray", new File("Doublearray.jpg")); 
System.out.println("end"); 
+0

Диапазона контр между [0, 1,5], так как результат Я получаю только один цвет. Есть ли способ преобразовать эти значения из [0, 1.5] в [0, 255]? –

+0

@snakeplissken: Какой фактор вам нужно умножить на 1,5, чтобы получить 255? :-) Умножьте все значения с этим коэффициентом (170), и все будет хорошо. – haraldK

+0

Хм, я думаю, что каждый раз, когда я должен вычислить этот фактор. –

2

Вам необходимо установить BufferedImage следующим образом:

double[][] values;///your 2d double array 
for(int y=0;y<values.length;y++){ 
    for(int x=0;x<values[y].length;x++){ 
     int Pixel=(int)values[x][y]<<16 | (int)values[x][y] << 8 | (int)values[x][y]; 
     img.setRGB(x, y,Pixel); 
    } 

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