2013-10-24 123 views
2

我使用GWT,我想在圖像上實現一個簡單的MouseMoveHandler。 所以我簡單地實現這樣的:避免圖像的透明像素

Image icon = new Image(Context.IMAGES.infoIcon()); 
     icon.addMouseMoveHandler(new MouseMoveHandler() { 
      @Override 
      public void onMouseMove(MouseMoveEvent event) { 
       int left = event.getScreenX(); 
       int top = event.getScreenY(); 

      } 
     }); 

這是確定的,但我想事件避免透明像素。 有什麼辦法嗎?

回答

1

我能想到的唯一選擇是在HTML5畫布上繪製圖片。然後分析每個像素的RGB值並決定是否處理事件。

Canvas canvas = Canvas.createIfSupported(); 
Image imagePng = new Image("test.png"); 

if (_canvas != null) { 
    panel.add(canvas); 
} else { 
    // No canvas support in this browser 
    panel.add(imagePng); 
} 

canvas.getContext2d().drawImage(ImageElement.as(imagePng.getElement()), 0, 0); 

然後在你的MouseHandler代碼中。評估圖像(x,y)上的鼠標處理程序的位置,然後分析此位置上的圖像顏色。

int width = canvas.getOffsetWidth(); 
int height = canvas.getOffsetHeight(); 

ImageData imageData = canvas.getContext2d().getImageData(0, 0, width, height); 

int r = imageData .getRedAt(x, y); 
int g = imageData .getGreenAt(x, y); 
int b = imageData .getBlueAt(x, y); 

if (!isRGBValueTransparent(r, g, b)) { 
    // Do something; 
} 

的代碼可以改善,如果你不這樣做計算每一次,但保持某種矩陣您存儲像素是否是透明與否。然後,只需在所述矩陣中查找它。