You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Processing(Java)中放大pixels[]的显示效果?

高效放大pixels[]操作的显示尺寸方案

你遇到的问题核心是直接逐像素绘制矩形的软件渲染效率太低,而Processing的scale()是绘图变换,不会改变pixels[]的底层数据尺寸,所以得换思路——用内置的图像缩放功能,它是底层优化过的,帧率能拉上去。

下面给两种最实用的方法:

方法一:用小尺寸PImage做缓冲区,放大后显示

这是最推荐的方案,因为PImage的缩放是硬件加速/底层优化的,比自己画rect快几十倍。

代码示例

PImage smallBuffer;
int scaleFactor = 4; // 放大4倍,可按需调整
int smallSize = 100;

void setup() {
  size(smallSize * scaleFactor, smallSize * scaleFactor);
  smallBuffer = createImage(smallSize, smallSize, RGB);
}

void draw() {
  // 1. 操作小缓冲区的pixels数组(你的核心逻辑)
  smallBuffer.loadPixels();
  for (int i = 0; i < smallBuffer.pixels.length; i++) {
    // 替换成你的逐像素处理代码,比如生成随机色示例
    smallBuffer.pixels[i] = color(random(255), random(255), random(255));
  }
  smallBuffer.updatePixels();
  
  // 2. 把小缓冲区放大后绘制到窗口
  image(smallBuffer, 0, 0, width, height);
}

关键说明

  • 你只需要专注操作smallBuffer的pixels[],它始终是100x100的尺寸,完全不影响你的逐像素逻辑。
  • image()函数的缩放是底层优化的,帧率能轻松跑到60(默认上限)。
  • 如果需要交互(比如鼠标点击对应小缓冲区的像素),只需要把鼠标坐标除以缩放比例:
    void mousePressed() {
      int bufferX = mouseX / scaleFactor;
      int bufferY = mouseY / scaleFactor;
      if (bufferX >=0 && bufferX < smallSize && bufferY >=0 && bufferY < smallSize) {
        smallBuffer.loadPixels();
        smallBuffer.pixels[bufferY * smallSize + bufferX] = color(255, 0, 0);
        smallBuffer.updatePixels();
      }
    }
    

方法二:用PGraphics做离屏渲染

如果需要更复杂的绘图操作(比如除了pixels[]还要画形状),可以用PGraphics做离屏缓冲区,逻辑和方法一类似:

PGraphics smallCanvas;
int scaleFactor = 4;
int smallSize = 100;

void setup() {
  size(smallSize * scaleFactor, smallSize * scaleFactor);
  smallCanvas = createGraphics(smallSize, smallSize);
}

void draw() {
  smallCanvas.beginDraw();
  // 这里可以混合操作pixels[]和绘图函数
  smallCanvas.loadPixels();
  // 你的逐像素处理逻辑...
  smallCanvas.updatePixels();
  // 也可以在smallCanvas上画形状、文字等
  smallCanvas.fill(255, 0, 0);
  smallCanvas.rect(10, 10, 20, 20);
  smallCanvas.endDraw();
  
  // 放大显示
  image(smallCanvas, 0, 0, width, height);
}

为什么你的原方法帧率低?

你循环画S×S的rect,本质是在draw()里执行10000次软件渲染的矩形绘制,每次都要走图形API的调用流程,开销极大。而内置的图像缩放是直接操作像素缓冲区的内存拷贝/插值,效率完全不在一个量级。

内容的提问来源于stack exchange,提问作者cotterjk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:06:25