[错误]: 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 () ' 代表 " 复制() " ,因此它受到同样的问题的影响。
- 复制步骤
让 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