网格尺寸:160 * 160
行数*列数= 16 * 16
我为此创建了一个位图。网格的每个单元格都填充有不同的颜色。我需要执行颜色插值。
最佳答案
我猜您想执行以下操作:拍摄16x16像素的图像并将其内插到160x160像素的图像。这是三个示例输出(您只说过要使用样条插值,而不是其中一个):
最近的邻居
双线性(在x和y方向上都应用linear spline interpolation)
双三次的(在x和y方向上都应用cubic spline interpolation)
original img http://img695.imageshack.us/img695/8200/nearest.png
linear interpolation img http://img707.imageshack.us/img707/3815/linear.png
cubic interpolation img http://img709.imageshack.us/img709/1985/cubic.png
.net Framework提供了这些方法以及更多方法(请参见MSDN, InterpolationMode Enumeration)。
此代码将执行图像缩放。 (我写了一个扩展方法,但是您可以省略this
关键字并将其用作常规功能):
public static Image EnlargeImage(this Image original, int scale)
{
Bitmap newimg = new Bitmap(original.Width * scale, original.Height * scale);
using(Graphics g = Graphics.FromImage(newimg))
{
// Here you set your interpolation mode
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bicubic;
// Scale the image, by drawing it on the larger bitmap
g.DrawImage(original, new Rectangle(Point.Empty, newimg.Size));
}
return newimg;
}
您可以这样使用它:
Bitmap my16x16img = new Bitmap(16, 16);
Bitmap the160x160img = (Bitmap)my16x16img.EnlargeImage(10);