作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
IList 包含 xy 平面上的一组 z 样本(均为 double )。GetColor()
将任何 z 值转换为像素颜色。我计划缩放 IList x 和 y 限制以对应于位图宽度和高度,因为样本数通常不等于像素数。样本是作为光栅扫描收集的,因此顺序不同。在扫描完成之前,我不知道有多少样本。是否有使用 LINQ 和/或 Lambda 表达式为每个位图像素找到最接近的 IList x 和 y 的巧妙方法?
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;
}
}
最佳答案
也许我提供的方法可以帮助您,它可以找到最接近的数字。
找到最接近样本的问题是处理以下情况:
w == 1
h == 1
Sample(x = 1, y = 8)
Sample(x = 8, x = 1)
Which one should be considered as closest?
用法:
int closestX = this.FindClosest(samples.Select(p => p.x).ToList(), w);
int closestY = this.FindClosest(samples.Select(p => p.y).ToList(), h);
方法:
public int FindClosest(IList<int> points, int desiredNumber)
{
int nearest = -1;
int latestDistance = int.MaxValue;
foreach (int t in points)
{
if (t == desiredNumber)
{
return t;
}
int currentDistance = Math.Abs(desiredNumber - t);
if (currentDistance < latestDistance)
{
nearest = t;
latestDistance = currentDistance;
}
}
return nearest;
}
关于c# - 如何将 IList<T> 映射到位图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7823418/
我是一名优秀的程序员,十分优秀!