2012-11-17 51 views
2

我有一個javafx.scene.image.Image,需要用一個子矩形創建一個新圖像。我已經嘗試過PixelReader.getPixels,但它需要一個WritablePixelFormat,我不知道如何使用它。JavaFx中圖像的子矩形

+0

你可以發佈一些可執行的示例代碼?我做過[類似的事情](http://stackoverflow.com/questions/12941600/reduce-number-of-colors-and-get-color-of-a-single-pixel),我不需要直接與'WritablePixelFormat'進行交互。 – jewelsea

回答

0

我建議你做的是實例化一個Canvas只是你的子矩形的大小,並使用其GraphicsContext片源圖像的存在。完成之後,像使用ImageView一樣使用Canvas。

我正在做一個切片中的圖像,並給你那些。

基本上步驟是:

  1. 創建子矩形
  2. 獲取一個帆布
  3. 使用圖像作爲源的GraphicsContext的大小的畫布節點,繪製到該帆布
  4. 插入您的畫布在場景中,或在適當情況下

這是GraphicsContext到d Ø繪圖:

public void drawImage(Image img, 
      double srcX, 
      double srcY, 
      double srcWidth, 
      double srcHeight, 
      double destX, 
      double destY, 
      double destWidth, 
      double destHeight) 

這裏是我的繪製圖像的「片」的代碼,在斯卡拉:

import javafx.scene.image.Image 
import javafx.scene.canvas.Canvas 

class Slicer(val img: Image, val xAmount: Int, val yAmount: Int) { 

    val sliceWidth = img.getWidth()/xAmount 
    val sliceHeight = img.getHeight()/yAmount 

    def sliceAt(x: Int, y: Int): Canvas = { 
    val canvas = new Canvas(sliceWidth, sliceHeight) 
    val grContext = canvas.getGraphicsContext2D() 

    val (sourceX, sourceY) = coordinatesOfSliceAt(x, y) 
    val (destX, destY) = (0, 0) 

    grContext.drawImage(img, 
     sourceX, sourceY, sliceWidth, sliceHeight, 
     destX, destY, sliceWidth, sliceHeight) 

    canvas 
    } 

    def coordinatesOfSliceAt(x: Int, y: Int): (Int, Int) = { 
    val coordX = ((x - 1) * sliceWidth).toInt 
    val coordY = ((y - 1) * sliceHeight).toInt 
    (coordX, coordY) 
    } 

} 

我來到這個解決方案時,我碰到這樣的:

http://docs.oracle.com/javafx/2/image_ops/jfxpub-image_ops.htm

相關部分是他們將原始圖像的部分繪製到畫布上。所以,不需要處理PixelReader或Writer。