Java 如何使用PixelWriter.setPixels()?
对你们大多数人来说,这应该是一个相当简单的问题。 如何正确设置PixelWriter.setPixel()的参数 我已经找了一个小时了。我当然也看过类似的网站 setPixels(整数x、整数y、整数w、整数h、像素格式、像素格式、T缓冲区、整数扫描线步长) 我知道如何使用x和y参数。我想我知道如何使用w和h参数。但我不知道如何使用其余的 我甚至无法设法让它工作 请温柔一点,我是初学者 编辑:绘图现在可以工作,但颜色仍然不是黑色。不知怎么的,它是浅蓝色的。有什么想法吗Java 如何使用PixelWriter.setPixels()?,java,javafx,parameters,Java,Javafx,Parameters,对你们大多数人来说,这应该是一个相当简单的问题。 如何正确设置PixelWriter.setPixel()的参数 我已经找了一个小时了。我当然也看过类似的网站 setPixels(整数x、整数y、整数w、整数h、像素格式、像素格式、T缓冲区、整数扫描线步长) 我知道如何使用x和y参数。我想我知道如何使用w和h参数。但我不知道如何使用其余的 我甚至无法设法让它工作 请温柔一点,我是初学者 编辑:绘图现在可以工作,但颜色仍然不是黑色。不知怎么的,它是浅蓝色的。有什么想法吗 public f
public final void drawLine(int xStart, int yStart, final int xEnd, final int yEnd, final Color c) {
// Variables declaration
this.xStart = xStart;
this.yStart = yStart;
this.xEnd = xEnd;
this.yEnd = yEnd;
// Getting the PixelWriter from the Canvas
this.pw = canvas.getGraphicsContext2D().getPixelWriter();
/**
* TODO Bresenham Implementation
*/
final WritablePixelFormat<ByteBuffer> format = WritablePixelFormat.getByteBgraPreInstance();
double dx = xEnd - xStart;
double dy = yEnd - yStart;
double error=dx/2.0;
byte imageData[] = new byte[300];
System.out.println("Red: "+c.getRed()+"\tGreen: "+c.getGreen()+"\tBlue: "+c.getBlue()); // R=0, G=0, B=0 (black)
for ( int i = 0;i<100;i++) {
int k = 0;
imageData[i]=(byte) c.getRed();
imageData[i+1]=(byte) c.getGreen();
imageData[i+2]=(byte) c.getBlue();
k+=3;
pw.setPixels(i, i, 1, 1, format,imageData, 0, 1);
}
public最终作废绘制线(int-xStart、int-yStart、final-int-xEnd、final-int-yEnd、final-Color c){
//变量声明
this.xStart=xStart;
this.yStart=yStart;
this.xEnd=xEnd;
this.yEnd=yEnd;
//从画布获取PixelWriter
this.pw=canvas.getGraphicsContext2D().getPixelWriter();
/**
*TODO Bresenham实现
*/
final WritablePixelFormat=WritablePixelFormat.GetByTebGraphResistence();
双dx=xEnd-xStart;
双dy=yEnd-yStart;
双误差=dx/2.0;
字节imageData[]=新字节[300];
System.out.println(“红色:“+c.getRed()+”\t绿色:“+c.getGreen()+”\t蓝色:“+c.getBlue());//R=0,G=0,B=0(黑色)
对于(int i=0;i选中此项,它有一些很好的简单示例。您可能需要另一种形式的setPixels(…)
。您可能有一些数据要渲染到图像中。这些数据是什么形式的?(rgb int值,字节,…)我想用Bresenham算法画简单的线。每像素一个。我想我可以在每次迭代后画出每一个像素。我不确定会是什么数据。你需要决定如何表示数据。通常你会使用每像素三个字节(分别表示该像素的红色、绿色和蓝色值),或将红色、绿色和蓝色值编码为整数中位的单个整数。(如果包含alpha通道,则存在类似选项。)然后将这些数据组合成一个数组。PixelFormat
参数指定数据的编码方式:您可以只使用一个预定义的选项(例如PixelFormat.getByteRgbInstance()
)。这很有帮助。我该如何使用缓冲区参数?我为scanlineStride参数输入了“1”该方法确实接受了这一点。为什么会这样?1到底会做什么?看看这个,它有一些很好的简单示例。您可能需要另一种形式的setPixels(…)
。可能您有一些数据要渲染成图像。这些数据是什么形式的?(rgb int值,字节,…)我想用Bresenham算法画简单的线。每像素一个。我想我可以在每次迭代后画出每一个像素。我不确定会是什么数据。你需要决定如何表示数据。通常你会使用每像素三个字节(分别表示该像素的红色、绿色和蓝色值),或将红色、绿色和蓝色值编码为整数中位的单个整数。(如果包含alpha通道,则存在类似选项。)然后将这些数据组合成一个数组。PixelFormat
参数指定数据的编码方式:您可以只使用一个预定义的选项(例如PixelFormat.getByteRgbInstance()
)。这很有帮助。我该如何使用缓冲区参数?我为scanlineStride参数输入了“1”而这个方法确实接受了这一点。为什么呢?它对1到底有什么作用?