gpt4 book ai didi

java - 写入串行端口时处理 block 绘图功能

转载 作者:行者123 更新时间:2023-12-01 11:19:35 24 4
gpt4 key购买 nike

在处理中,我编写了一个简单的程序,它获取图像的所有像素并将其值发送到串行端口。这是在绘制函数内部完成的,并且它在每个绘制事件中迭代像素数组。

因此,对于 200 x 200 的图像,有 40000 个像素,绘制函数被调用 40000 次。但我没有看到在此处理过程中所做的任何更改的结果。 30 秒后,数据被序列化,然后所有更改才可见。

在写入序列期间,我需要什么才能绘制并立即看到结果?异步线程可以作为解决方案吗?我也尝试过这个,并调用重绘方法,但似乎没有任何帮助。

最佳答案

对于 200x200 的图像,您将循环遍历 40000 个像素,但您不需要如此频繁地调用 draw() 函数。您可以为每个像素在每次draw()调用时运行一次循环,以防您的像素实际上发生变化,否则,您可以在setup()

中缓存一次像素值

关于写入串行,应该不会太复杂。下面是一个概念验证草图,说明了编写并行写入串行的线程的一种方法:

import processing.serial.*;

int w = 200;
int h = 200;
int np = w*h;//total number of pixels

PImage image;

SerialThread serial;

void setup(){
image = createImage(w,h,ALPHA);
//draw a test pattern
for(int i = 0 ; i < np; i++) image.pixels[i] = color(tan(i) * 127);
//setup serial
serial = new SerialThread(this,Serial.list()[0],115200);
}
void draw(){
image(image,0,0);
}
void mousePressed(){
println("writing pixel data to serial port");
for(int i = 0 ; i < np; i++) serial.write((int)brightness(image.pixels[i]));
}
//implement runnable - can run as thread, alternatively extend Thread
class SerialThread implements Runnable{

Serial serial;

boolean running = false;//keep the tread running

int data;//store a byte to send
boolean hasData;//keep track if the most recent data was written

SerialThread(PApplet parent,String port,int baudrate){
try{
//setup serial
this.serial = new Serial(parent,port,baudrate);
//setup thread
running = true;
new Thread(this).start();
}catch(Exception e){
System.err.println("error opening serial port! please check settings (port/baudrate) and the usb cable");
e.printStackTrace();
}
}
//handled
public void run(){
while(running){//endless loop to keep the thread running
if(hasData){//if there is data to write
if(serial != null) serial.write(data); //send it via serial, if the port is open
hasData = false;//mark that the data was sent
}
}
}

public void write(int data){
this.data = data;
hasData = true;
}

}

关于java - 写入串行端口时处理 block 绘图功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31405616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com