2
我有一個javafx.scene.image.Image,需要用一個子矩形創建一個新圖像。我已經嘗試過PixelReader.getPixels,但它需要一個WritablePixelFormat,我不知道如何使用它。JavaFx中圖像的子矩形
我有一個javafx.scene.image.Image,需要用一個子矩形創建一個新圖像。我已經嘗試過PixelReader.getPixels,但它需要一個WritablePixelFormat,我不知道如何使用它。JavaFx中圖像的子矩形
我建議你做的是實例化一個Canvas只是你的子矩形的大小,並使用其GraphicsContext,畫片源圖像的存在。完成之後,像使用ImageView一樣使用Canvas。
我正在做一個切片中的圖像,並給你那些。
基本上步驟是:
這是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。
你可以發佈一些可執行的示例代碼?我做過[類似的事情](http://stackoverflow.com/questions/12941600/reduce-number-of-colors-and-get-color-of-a-single-pixel),我不需要直接與'WritablePixelFormat'進行交互。 – jewelsea