IList在xy平面上包含一組z樣本(全部爲雙精度)。 GetColor()
將任意z轉換爲像素顏色。 我打算縮放IList x和y限制以對應位圖寬度和高度,因爲樣本數量通常不等於像素數量。 樣本作爲光柵掃描收集,因此順序不同。我不知道掃描完成之前有多少個樣本。 有沒有一種巧妙的方法來使用LINQ和/或Lambda表達式爲每個位圖像素找到最接近的IList x和y?如何將IList <T>映射到位圖?
PictureBox pb;
Bitmap bmp = new Bitmap(pb.Width, pb.Height);
IList<Sample> samples = new List<Sample>();
// ... collect samples ...
// Find closest sample
Sample GetSample(int w, int h)
{
// how to find closest x and y for each w and h?
}
// Map samples to bitmap
for (var w = 0; w < pb.Width; w++)
{
for (var h = 0; h < pb.Height; h++)
{
var sample = GetSample(w, h);
var color = GetColor(sample.z, samples.Min().z, samples.Max().z);
bmp.SetPixel(w, h, color);
}
}
pb.Image = bmp;
Color GetColor(double z, double minZ, double maxZ)
{
var red = (int) (255*(z - minZ)/(maxZ - minZ));
var blue = 255 - red;
var green = red*blue/65;
return Color.FromArgb(red, green, blue);
}
// class Sample
public class Sample : IComparable<Sample>
{
public double z { get; set; }
public double x { get; set; }
public double y { get; set; }
int IComparable<Sample>.CompareTo(Sample s)
{
return z < s.z ? -1 : 1;
}
}