Java 如何使用PixelWriter.setPixels()?

Java 如何使用PixelWriter.setPixels()?,java,javafx,parameters,Java,Javafx,Parameters,对你们大多数人来说,这应该是一个相当简单的问题。 如何正确设置PixelWriter.setPixel()的参数 我已经找了一个小时了。我当然也看过类似的网站 setPixels(整数x、整数y、整数w、整数h、像素格式、像素格式、T缓冲区、整数扫描线步长) 我知道如何使用x和y参数。我想我知道如何使用w和h参数。但我不知道如何使用其余的 我甚至无法设法让它工作 请温柔一点,我是初学者 编辑:绘图现在可以工作,但颜色仍然不是黑色。不知怎么的,它是浅蓝色的。有什么想法吗 public f

对你们大多数人来说,这应该是一个相当简单的问题。 如何正确设置PixelWriter.setPixel()的参数

我已经找了一个小时了。我当然也看过类似的网站

setPixels(整数x、整数y、整数w、整数h、像素格式、像素格式、T缓冲区、整数扫描线步长)

我知道如何使用x和y参数。我想我知道如何使用w和h参数。但我不知道如何使用其余的

我甚至无法设法让它工作

请温柔一点,我是初学者

编辑:绘图现在可以工作,但颜色仍然不是黑色。不知怎么的,它是浅蓝色的。有什么想法吗

    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到底有什么作用?