SmileBASIC,90字节是什么关键
DEF C I,J
DIM T[LEN(I)]ARYOP.,T,I,16711936ARYOP 2,T,T,T
ARYOP 6,T,T,0,1ARYOP 5,I,I,J,T
END
I是前景,输出,J是背景。两者都是像素的整数阵列,采用32位ARGB格式。
不打高尔夫球
DEF C IMAGE,BACKGROUND 'function
DIM TEMP[LEN(IMAGE)] 'create array "temp"
ARYOP #AOPADD,TEMP,IMAGE,-RGB(0,255,0) 'temp = image - RGB(0,255,0)
ARYOP #AOPCLP,TEMP,TEMP,-1,1 'temp = clamp(temp, -1, 1)
ARYOP #AOPMUL,TEMP,TEMP,TEMP 'temp = temp * temp
ARYOP #AOPLIP,IMAGE,IMAGE,BACKGROUND,TEMP 'image = linear_interpolate(image, background, temp)
END
说明:
ARYOP是将简单操作应用于数组中每个元素的函数。
叫做ARYOP mode, output_array, input_array_1, input_array_2, ...
首先,要确定图像中的哪些像素是绿色,请-16711936从前景图像中的每个像素中减去(绿色的RGBA表示)。这给出了一个数组,其中0代表绿色像素,任何其他数字代表非绿色像素。
要将所有非零值转换为1,将它们平方(以除去负数),然后将其钳位在0和之间1。
结果是只有0s和1s 的数组。
0s代表前景图像中的绿色像素,应替换为来自背景的像素。
1s代表非绿色像素,需要将其替换为前景中的像素。
使用线性插值可以很容易地做到这一点。