#9169·p5.js

[错误]: p5.Image.prototype.copy 和 blend 无法为高像素密度调整目标坐标

作者: Pcmhacker-piro创建于 2026年9月11日更新于 2026年9月11日
  • 最适合的组成部分 图像 (p5.

描述错误 在 " p5 " 上调用副本()'或blend()'时。 具有"像素敏度 > 1"(如:Retina /高DPI显示)的图像"实例",目的坐标("dx","dy","dw","dh")不会被目的图像的像素密度所缩放.

在"p5.mage.prototype. 复制帮助"(920-960行)中,源坐标被"s=srcImage.canvas.width / srcImage.width"所缩放,但目的地参数作为原始逻辑值直接传递到"dstImage.drawwing Context.drawImage ()".

由于dstImage.drawwing Context'直接在dstImage'的物理画布上运行,没有自动的DPI变换矩阵,drawImage ()'只吸收了[dx, dy, dw, dh]'物理画布像素,而不是`[ddx, ddy, d*dh]'.

对于 " 像素分辨性(2) " ,这导致复制的图像只覆盖了左上角预定区域的四分之一,剩下的75%预定目标区域完全未受影响(透明/空白)。 由于`p5.mage.prototype.blend () ' 代表 " 复制() " ,因此它受到同样的问题的影响。

  • 复制步骤
zz
让 src = 创建图像(50、50);
src. load 像素( ;) ;
为(Let i = 0;i < src.pixels.長;i QQ 4){
src.像素[一]=255;//红
src.像素[i+3]=255;//Alpha
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
src.update 像素( ;) ;

dst = 创建图像( 100, 100);
dst.pixelDensity(2); //帆布后置商店为200x200
dst. copy(sr, 0, 0, 50, 50, 0, 0, 50, 50);

// 在逻辑图像的右下角图像中取出一个点
让col = dst.get(35,35);
consember.log(col); // [0, 0, 0, 0] 代替 [255, 0, 0, 255] (中文(简体) ).

预期行为 目的地坐标应以d = dstImage.canvas.width / dstImage.width'来缩放,以便复制()'和`blend()'在高DPI图像上适当填充预期的逻辑区域.

内容来源: processing/p5.js