📄 form1.cs
字号:
if (t > 255)
t = 255;
else if (t < 0)
t = 0;
rgbvalue[3 * i] = (byte)irontable[t, 2]; //bmp图像颜色顺序是BGR而不是调色板的顺序RGB
rgbvalue[3 * i+1] = (byte)irontable[t,1];
rgbvalue[3 * i+2] = (byte)irontable[t, 0];
}
break;
case "热金属10": //iron10
for (int i = 0; i < temtable.table.Length; i++)
{
int t = (int)((temtable.table[i] - tmin) / (tmax - tmin) * 256);
if (t > 249)
t = 249;
else if (t < 0)
t = 0;
if (t / 25 < 4)
{
rgbvalue[3 * i] = (byte)irontable[t/25*25, 2];
rgbvalue[3 * i + 1] = (byte)irontable[t/25*25, 1];
rgbvalue[3 * i + 2] = (byte)irontable[t/25*25, 0];
}
else
{
rgbvalue[3 * i] = (byte)irontable[t / 25 * 25 + 25, 2]; //bmp图像颜色顺序是BGR而不是调色板的顺序RGB
rgbvalue[3 * i + 1] = (byte)irontable[t / 25 * 25+25, 1];
rgbvalue[3 * i + 2] = (byte)irontable[t / 25 * 25+25,0];
}
}
break;
case "彩虹": // rain
RainTable raintable = new RainTable();
for (int i = 0; i < temtable.table.Length; i = i + 1)
{
int t = (int)((temtable.table[i] - tmin) * 1.0 / (tmax - tmin) * 256);
if (t >= 255)
t = 255;
else if (t < 0)
t = 0;
rgbvalue[3 * i] = (byte)raintable.table[t, 2]; //bmp图像颜色顺序是BGR而不是调色板的顺序RGB
rgbvalue[3 * i + 1] = (byte)raintable.table[t, 1];
rgbvalue[3 * i + 2] = (byte)raintable.table[t,0];
}
break;
case "彩虹10": //rain10
RainTable raintable10 = new RainTable();
for (int i = 0; i < temtable.table.Length; i = i + 1)
{
int t = (int)((temtable.table[i] - min) * 1.0 / (max - min) * 256);
if (t >= 249)
t = 249;
else if (t < 0)
t = 0;
if (t / 25 < 7)
{
rgbvalue[3 * i] = (byte)raintable10.table[t / 25 * 25, 2];
rgbvalue[3 * i + 1] = (byte)raintable10.table[t / 25 * 25, 1];
rgbvalue[3 * i + 2] = (byte)raintable10.table[t / 25 * 25,0];
}
else
{
rgbvalue[3 * i] = (byte)raintable10.table[t / 25 * 25 + 25, 2]; //bmp图像颜色顺序是BGR而不是调色板的顺序RGB
rgbvalue[3 * i + 1] = (byte)raintable10.table[t / 25 * 25 + 25, 1];
rgbvalue[3 * i + 2] = (byte)raintable10.table[t / 25 * 25 + 25, 0];
}
}
break;
}//switch end
Marshal.Copy(rgbvalue, 0, ptr, bytes); //处理后的图像数据复制到内存
Mybitmap.UnlockBits(bmdata); //内存解锁
this.pictureBox1.Image = Mybitmap; //图像显示
pictureBox1.Refresh();
}
private void trackBar2_Scroll(object sender, EventArgs e)
{
// if (trackBar2.Value >trackBar1.Value)
//trackBar1.Value = trackBar2.Value + 1;
float f = (max - min) / 100; //trackBar1.Maximum设定为100,max,min 为图像的最值,全局变量,前面已定义并求出
float tmax = (trackBar1.Value-50) * f+max ;
label2.Text = tmax.ToString(); //温度下上限的显示
float tmin = (trackBar2.Value-50) * f+min ;
label3.Text = tmin.ToString(); //温度下限的显示
label4.Text = "温度上限:" + label2.Text;
label5.Text = "温度下限:" + label3.Text;
//////////////////////////////////////////////////////////////////////////////////////////////////
Bitmap Mybitmap = (Bitmap)this.pictureBox1.Image; //要处理的图像
int bytes = Mybitmap.Width * Mybitmap.Height * 3; //数据数目
byte[] rgbvalue = new byte[bytes]; //存放原始图像的颜色值320*240*3
Rectangle rect = new Rectangle(pictureBox1.Location, pictureBox1.Size);
BitmapData bmdata = Mybitmap.LockBits(rect, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); //图像颜色锁入内存
IntPtr ptr = bmdata.Scan0; //图像首行地址
Marshal.Copy(ptr, rgbvalue, 0, bytes); //图像颜色值复制到处理数组
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
string pal = comboBox1.Text;
switch (pal) //根据温度上下限重新绘图,tmax对应最亮的颜色,tmin最暗色
{
case "灰度": // grey
for (int i = 0; i < temtable.table.Length; i++)
{
int t = (int)((temtable.table[i] - tmin) / (tmax - tmin) * 256);
if (t > 255)
t = 255;
else if (t < 0)
t = 0;
rgbvalue[3 * i] = (byte)t;
rgbvalue[3 * i + 1] = (byte)t;
rgbvalue[3 * i + 2] = (byte)t;
}
break;
case "逆灰度": //congrey
for (int i = 0; i < temtable.table.Length; i++)
{
int t = (int)((temtable.table[i] - tmin) / (tmax - tmin) * 256);
if (t > 255)
t = 255;
else if (t < 0)
t = 0;
rgbvalue[3 * i] = (byte)(255 - t);
rgbvalue[3 * i + 1] = (byte)(255 - t);
rgbvalue[3 * i + 2] = (byte)(255 - t);
}
break;
case "黄色": // yellow
for (int i = 0; i < temtable.table.Length; i++)
{
int t = (int)((temtable.table[i] - tmin) / (tmax - tmin) * 256);
if (t > 255)
t = 255;
else if (t < 0)
t = 0;
rgbvalue[3 * i] = 0;
rgbvalue[3 * i + 1] = (byte)t; //bmp图像颜色顺序是BGR而不是调色板的顺序RGB
rgbvalue[3 * i + 2] = (byte)t;
}
break;
case "热金属": //iron
for (int i = 0; i < temtable.table.Length; i++)
{
int t = (int)((temtable.table[i] - tmin) / (tmax - tmin) * 256);
if (t > 255)
t = 255;
else if (t < 0)
t = 0;
rgbvalue[3 * i] = (byte)irontable[t, 2]; //bmp图像颜色顺序是BGR而不是调色板的顺序RGB
rgbvalue[3 * i + 1] = (byte)irontable[t, 1];
rgbvalue[3 * i + 2] = (byte)irontable[t, 0];
}
break;
case "热金属10": //iron10
for (int i = 0; i < temtable.table.Length; i++)
{
int t = (int)((temtable.table[i] - tmin) / (tmax - tmin) * 256);
if (t > 249)
t = 249;
else if (t < 0)
t = 0;
if (t / 25 < 4)
{
rgbvalue[3 * i] = (byte)irontable[t / 25 * 25, 2]; //bmp图像颜色顺序是BGR而不是调色板的顺序RGB
rgbvalue[3 * i + 1] = (byte)irontable[t / 25 * 25, 1];
rgbvalue[3 * i + 2] = (byte)irontable[t / 25 * 25,0];
}
else
{
rgbvalue[3 * i] = (byte)irontable[t / 25 * 25 + 25, 2];
rgbvalue[3 * i + 1] = (byte)irontable[t / 25 * 25 + 25, 1];
rgbvalue[3 * i + 2] = (byte)irontable[t / 25 * 25 + 25, 0];
}
}
break;
case "彩虹": // rain
RainTable raintable = new RainTable();
for (int i = 0; i < temtable.table.Length; i = i + 1)
{
int t = (int)((temtable.table[i] - tmin) * 1.0 / (tmax - tmin) * 256);
if (t >= 255)
t = 255;
else if (t < 0)
t = 0;
rgbvalue[3 * i] = (byte)raintable.table[t, 2]; //bmp图像颜色顺序是BGR而不是调色板的顺序RGB
rgbvalue[3 * i + 1] = (byte)raintable.table[t, 1];
rgbvalue[3 * i + 2] = (byte)raintable.table[t, 0];
}
break;
case "彩虹10": //rain10
RainTable raintable10 = new RainTable();
for (int i = 0; i < temtable.table.Length; i = i + 1)
{
int t = (int)((temtable.table[i] - min) * 1.0 / (max - min) * 256);
if (t >= 249)
t = 249;
else if (t < 0)
t = 0;
if (t / 25 < 7)
{
rgbvalue[3 * i] = (byte)raintable10.table[t / 25 * 25, 2]; //bmp图像颜色顺序是BGR而不是调色板的顺序RGB
rgbvalue[3 * i + 1] = (byte)raintable10.table[t / 25 * 25, 1];
rgbvalue[3 * i + 2] = (byte)raintable10.table[t / 25 * 25, 0];
}
else
{
rgbvalue[3 * i] = (byte)raintable10.table[t / 25 * 25 + 25, 2];
rgbvalue[3 * i + 1] = (byte)raintable10.table[t / 25 * 25 + 25, 1];
rgbvalue[3 * i + 2] = (byte)raintable10.table[t / 25 * 25 + 25, 0];
}
}
break;
}//switch end
Marshal.Copy(rgbvalue, 0, ptr, bytes); //处理后的图像数据复制到内存
Mybitmap.UnlockBits(bmdata); //内存解锁
this.pictureBox1.Image = Mybitmap; //图像显示
pictureBox1.Refresh();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -