我有一个javafx.scene.image.Image,需要创建一个带有子矩形的新图像。我已经尝试了PixelReader.getPixels,但它要求WritablePixelFormat,我不知道如何使用它。
答案 0 :(得分:0)
我建议你做的是实例化一个 Canvas ,只是你的子矩形的大小,并使用其GraphicsContext,绘制那里的源图像片段。完成后,使用Canvas,就像使用ImageView一样。
我在一个类中切割图像并为您提供这些内容。
基本上步骤是:
这是用于绘图的GraphicsContext:
public void drawImage(Image img,
double srcX,
double srcY,
double srcWidth,
double srcHeight,
double destX,
double destY,
double destWidth,
double destHeight)
以下是我在Scala中绘制图像“切片”的代码:
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
相关部分是他们将原始图像的片段绘制到画布上。因此,无需处理PixelReaders或Writers。