网格尺寸: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);

10-01 23:33