Zamiana tablicy na obraz w skali szarości

0

Witam!

Mam problem, z którym głowię się od dłuższego czasu, mianowicie daną mam tablicę o wartościach 0-255 i chciałbym najprostszym sposobem zmienić ją na obraz w 8-bitowej skali szarości (gdzie 0-czarny, 255-biały).

Wymyśliłem coś takiego:

 public BufferedImage TabToImage(int tab[][]){
    int i,j,m,n;
    int pix[] = new int [w*h];
    int index=0;
    for (j = 0; j < h; j++){ 
        for (i = 0; i < w; i++){
              pix[index++] = (tab[i][j]<<24)|(tab[i][j]<<16)|(tab[i][j]<<8);
        } 
    }
    Image img = createImage(new MemoryImageSource(w,h,pix,0,w));
    BufferedImage obraz = new BufferedImage(w,h, BufferedImage.TYPE_BYTE_GRAY);
    Graphics2D g2 = obraz.createGraphics();
    g2.drawImage(img,0,0,this);
    return(obraz);    
 }

Ale nie działa to prawidłowo, otrzymywany obraz jest ciemniejszy niż powinien być.

Może znacie, jakieś proste panaceum na mój problem?

Pozdrawiam!

0

Przesunięcie bitowe jest mówią nieładnie słabym pomysłem. Lepiej jest odwzorować piksel zgodnie ze standardem ITU-R Recommendation BT.709 czyli ogólnie standardem HDTV:
Ogólny wzór na szary:
szary = Red 0.2125 + Green 0.7154 + Blue * 0.0721

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0