图像处理从像素数据开始
位图把画面存储为二维像素网格,每个像素包含红、绿、蓝和透明度四个通道。程序可以读取、比较或重新绘制这些数据,让静态图像成为生成视觉的颜色来源。
把《星夜》转换为可读取的像素数据,让 500 个粒子沿噪声流场移动,并用当前位置的图像颜色持续绘制轨迹。
理解数字图像由二维像素网格与 RGBA 颜色通道组成。
使用 preload()、loadPixels() 和索引公式读取指定位置的颜色。
理解粒子位置如何同时决定流场方向与图像采样位置。
阅读从图像数据到彩色轨迹的完整代码执行路径。
位图把画面存储为二维像素网格,每个像素包含红、绿、蓝和透明度四个通道。程序可以读取、比较或重新绘制这些数据,让静态图像成为生成视觉的颜色来源。
preload() 保证《星夜》在 setup() 前就绪;sourceImage.loadPixels() 把颜色写入 pixels[]。500 个粒子共享这份数据,不再为每个粒子重复加载图片。
sampleImageColor() 先把粒子位置限制在图片范围,再用 (y × width + x) × 4 找到像素起点,依次读取 R、G、B 三个通道作为圆点填色。
画布被划分为 10 像素网格,每格保存一个 Perlin noise 方向向量。粒子根据当前位置查找向量、更新加速度与速度,再读取当前位置对应的《星夜》颜色。
setup() 只绘制一次白色背景;draw() 不再清屏,因此每一帧的彩色圆点都会留在画布上,逐渐形成原案例的连续流动纹理。
正在载入源码…程序不必直接显示原图;只要读取像素颜色,就能让其他图形保留《星夜》的色彩关系。
同一组粒子坐标既用于查找流场向量,也用于读取图片颜色,使运动结构和图像信息保持同步。
当 draw() 不覆盖上一帧时,每次绘制都会累积;时间因此被记录为逐渐加密的彩色轨迹。