绘制单个像素 LibGDX

Drawing individual pixels LibGDX

我正在 Java 中使用 LibGDX 编写程序,我想每 10 帧用屏幕上的新像素更新屏幕。我试过使用像素图,但它似乎不起作用。这是我的代码:

package com.mhsjlw.heat;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Pixmap;
import com.badlogic.gdx.graphics.Pixmap.Format;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;

public class Heat extends ApplicationAdapter {

SpriteBatch batch;
Texture img;
private OrthographicCamera camera;

FlirClient flir = new FlirClient("x.x.x.x.x", 2525);
int[] palette = FlirPalette.IRONBOW_PALETTE;
byte[] frame = new byte[4800];

@Override
public void create() {

    flir.run();

    camera = new OrthographicCamera();
    camera.setToOrtho(false, 80, 60);

    Pixmap pixmap = new Pixmap( 80, 60, Format.RGB888);

    pixmap.drawPixel(1, 1);


}

@Override
public void render() {

    camera.update();

    Pixmap pixmap = new Pixmap( 80, 60, Format.RGB888);



    while(true) {

        frame = flir.getFrame();

        for (int row=0; row<60; row++) {
            for (int col=0; col<0; col++) {
                int ndx = row * 80 + col;
                pixmap.drawPixel(col, row, FlirPalette.getRgb888(frame[ndx], palette));
            }
        }

        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
}

每当我 运行 这只是 returns 黑屏。提前致谢。

您的代码有问题:您在 render 中有一个 while(true),但从来没有 break

但这不是唯一的问题。您正在向 Pixmap 绘制一个像素,但您永远不会渲染 Pixmap 本身。您需要从 Pixmap:

创建一个 Texture
package com.mhsjlw.heat;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Pixmap;
import com.badlogic.gdx.graphics.Pixmap.Format;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;

public class Heat extends ApplicationAdapter {

    private SpriteBatch batch;
    private Texture img;
    private OrthographicCamera camera;

    private FlirClient flir = new FlirClient("69.165.165.194", 2525);
    private int[] palette = FlirPalette.IRONBOW_PALETTE;
    private byte[] frame = new byte[4800];

    @Override
    public void create() {

        flir.run();

        camera = new OrthographicCamera();
        camera.setToOrtho(false, 80, 60);
        batch = new SpriteBatch();

        //this is useless here
        Pixmap pixmap = new Pixmap( 80, 60, Format.RGB888);

        pixmap.drawPixel(1, 1);
    }

    @Override
    public void render() {

        camera.update();

        Pixmap pixmap = new Pixmap( 80, 60, Format.RGB888);

        while(true) { //add a condition!

            frame = flir.getFrame();

            for (int row=0; row<60; row++) {
                for (int col=0; col<0; col++) {
                    int ndx = row * 80 + col;
                    pixmap.drawPixel(col, row, FlirPalette.getRgb888(frame[ndx], palette));
                }
            }

            img = new Texture(pixmap); //create Texture from Pixmap
            pixmap.dispose(); //do not leak memory
            batch.begin();
            batch.draw(img, 100, 100); //draw pixmap texture
            batch.end();

            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

我已经评论了我所做的更改(class 开头的 private 修饰符除外),但完整保留了代码中一些有问题的部分。

你真的应该为你的 while 循环添加一个条件,它目前是无限的。 另外,你真的不应该在每次代码是 运行 时都创建一个新的 Pixmap,这不仅是糟糕的设计而且是浪费。

如果我遗漏了什么,我会更新我的答案。