我有一个 javafx.scene.image.Image 并且需要创建一个带有子矩形的新图像。我已经尝试过 PixelReader.getPixels 但它要求 WritablePixelFormat 而我不知道如何使用它。
问问题
1272 次
1 回答
0
我建议你做的是实例化一个Canvas只是你的子矩形的大小,并使用它的GraphicsContext在那里绘制你的源图像。之后,像使用 ImageView 一样使用 Canvas。
我在一个将图像切成薄片并给你的课程中这样做。
基本上步骤是:
- 创建一个子矩形大小的 Canvas 节点
- 获取该 Canvas 的 GraphicsContext
- 使用您的图像作为源,在该画布上绘制
- 将您的 Canvas 插入您的场景中,或任何适当的地方
这是进行绘图的 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。
于 2013-06-09T18:36:56.487 回答