绘制单个像素 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
,这不仅是糟糕的设计而且是浪费。
如果我遗漏了什么,我会更新我的答案。
我正在 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
,这不仅是糟糕的设计而且是浪费。
如果我遗漏了什么,我会更新我的答案。