2013-02-01 145 views
2

我正在用Eclipse Window Builder編輯器構建GUI。 我用Gridlayout製作了一個Composite,並在其中放置了一個Label。 來自另一個類的某些方法會生成一個保存在字節數組中的原始8位1280x1024灰度圖像。 這是我生成我的ImageData等在mainMethod:Java/SWT顯示8位灰度圖像從字節數組

Color white = display.getSystemColor(SWT.COLOR_WHITE); 
Color black = display.getSystemColor(SWT.COLOR_BLACK); 

PaletteData palette = new PaletteData(255, 255, 255); 

imgData = new ImageData(1280, 1024, 8, palette); 

imgLabel = new Label(composite_3, SWT.NONE); 
imgLabel.setImage(null); 
imgLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); 

我仍然有問題,瞭解究竟是什麼,我應該與PaletteData做,因爲我並不需要的顏色反正。 (顏色)深度應該是8,因爲我希望它有255個灰度值?

這是我setImg法作爲字節[]填充數據,會從另一個線程儘快叫:

public static void setImg(final byte[] b) { 
    Display.getDefault().syncExec(new Runnable() { 
     @Override 
     public void run() { 
      imgData.setPixels(0, 0, 1280, b, 0); 
      img = new Image(Display.getCurrent(), imgData); 
      Image grayImg = new Image(Display.getCurrent(), img, SWT.IMAGE_GRAY); 
      imgLabel.setImage(img); 

//    img.dispose(); 
     } 
    }); 
} 

我已經試過

imgLabel.setImage(img); 

imgLabel.setImage(grayImg); 

好了第一行現在正確顯示... 看來我只能設置1裏與imgData.setPixels(...)的像素ne是一種無用的imo或我做的其他事情是錯的?

回答

0

您的PaletteData使用直接調色板的構造函數。我想你想要的是索引調色板的構造函數。有關更多說明,另請參閱herehere

下面的代碼段示出了

  • 如何使用索引調色板
  • 如何將圖像設定爲一個整體(未逐行)

    // pixel depth will be 8-bit, so there is space for 256 different (grey) values 
    RGB[] rgb = new RGB[256]; 
    
    // build grey scale palette: 256 different grey values are generated. 
    for (int i = 0; i < 256; i++) { 
        rgb[i] = new RGB(i, i, i); 
    } 
    
    // Construct a new indexed palette given an array of RGB values. 
    PaletteData paletteData = new PaletteData(rgb); 
    
    // create an image with given dimensions, depth and color palette 
    ImageData imageData = new ImageData(1280, 1024, 8, paletteData); 
    
    // data represents the pixels of the image. This corresponds to 'b' in Your code 
    imageData.data = b; 
    
    // note that there are also other 'Image', e.g. java.awt.Image 
    org.eclipse.swt.graphics.Image image = new Image(Display.getCurrent(), imageData); 
    
    // paint 
    imgLabel.setImage(img); 
    
    // release operating system resources corresponding to the image 
    image.dispose(); 
    
  • 創建灰度調色板

注意:我試着用您的調色板數據,例如

PaletteData palette = new PaletteData(255, 255, 255); 

它的工作原理是它顯示了一些灰度圖片(實際上是一個視頻)。然而,索引在給定的代碼片段中使用的版本更加友善。看看上面提供的第一個鏈接。它給出了索引直接調色板之間的區別的很好解釋。