Вот код, который вычисляет цвет в (x, y) с учетом четырех угловых цветов.
#include <vector>
#include <cassert>
#include <windows.h>
using namespace std;
int interpolate(int a, int b, int c, int d, double t, double s)
{
return (int)(a*(1-t)*(1-s) + b*t*(1-s) + c*(1-t)*s + d*t*s);
}
COLORREF interpolateColors(const vector<COLORREF> &cornercolors, int W, int H, int x, int y)
{
assert(cornercolors.size() == 4);
double t = ((double)x)/W;
double s = ((double)y)/H;
return RGB( interpolate(GetRValue(cornercolors[0]), GetRValue(cornercolors[1]), GetRValue(cornercolors[2]), GetRValue(cornercolors[3]), t, s),
interpolate(GetGValue(cornercolors[0]), GetGValue(cornercolors[1]), GetGValue(cornercolors[2]), GetGValue(cornercolors[3]), t, s),
interpolate(GetBValue(cornercolors[0]), GetBValue(cornercolors[1]), GetBValue(cornercolors[2]), GetBValue(cornercolors[3]), t, s) );
}