我编写了一个使用双线性插值方法缩放图像的算法,但它并没有按预期工作。我真的找不到我的代码中的任何错误,但它正在产生错误的输出:
Process(context: ImageData): ImageData {
var imageData = context;
var w = imageData.width;
var h = imageData.height;
var small = new Uint32Array((<any>imageData.data).buffer);
var big = new Uint32Array(small.length * (this.factor * this.factor));
var w2 = this.factor * imageData.width;
var h2 = this.factor * imageData.height;
var x_ratio = ((w) / w2);
var y_ratio = ((h) / h2);
for (var i = 0, f = h2; i < f; ++i) {
var py_a = (i * y_ratio);
var py = py_a | 0;
var py_t = py_a - py;
for (var j = 0, k = w2; j < k; ++j) {
var px_a = (j * x_ratio);
var px = px_a | 0;
var index = ((py * w) + px) | 0;
var px_t = px_a - px;
var fy1 = small[index] + (small[index + 1] - small[index]) * px_t;
var fy2 = small[index + w] + (small[index + w + 1] - small[index + w]) * px_t;
var tmp = fy1 + (fy2 - fy1) * py_t;
big[i * w2 + j] = tmp;
}
}
var ar = new Uint8ClampedArray(big.buffer);
var newImage = new ImageData(ar, w2, h2);
return newImage;
}
我想知道是否可以将每个通道一起处理,还是应该分开处理(至少alpha通道)?