这是VS中的Windows窗体。它说在当前的背景下不存在“newpic”。我尝试使用load事件处理程序方法或任何你调用的方法将访问修饰符设置为public。但那并不适合我。我确信它很简单,我不知道。 如果我可以将“newpic”保存在“资源”中,那就太好了
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace flexland
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void Form1_Load(object sender, EventArgs e)
{
Bitmap bmp=new Bitmap(Properties.Resources.pic1in);
Bitmap newpic = new Bitmap(bmp);
int width=bmp.Width;
int height=bmp.Height;
Color c=default(Color);
byte t=10;
byte t2=10;
byte rc=50;
byte gc=50;
byte bc=50;
byte rs=10;
byte gs=10;
byte bs=10;
byte rc2=100;
byte gc2=100;
byte bc2=100;
byte rs2=100;
byte gs2=100;
byte bs2=100;
byte rs3=200;
byte gs3=200;
byte bs3=200;
for(int y=0; y<height; y++)
{
for(int x=0; x<width; x++)
{
c=bmp.GetPixel(x, y);
byte a=c.A;
byte r=c.R;
byte g=c.G;
byte b=c.B;
int rl=rc-t;
int rh=rc+t;
int gl=gc-t;
int gh=gc+t;
int bl=bc-t;
int bh=bc+t;
int rl2=rc2-t2;
int rh2=rc2+t2;
int gl2=gc2-t2;
int gh2=gc2+t2;
int bl2=bc2-t2;
int bh2=bc2+t2;
if((r>rl&&r<rh)&&(r>rl&&r<rh)&&(b>bl&&b<bh))
{
newpic.SetPixel(x, y, Color.FromArgb(a, rs, gs, bs));
}
else if((r>rl&&r<rh)&&(r>rl&&r<rh)&&(b>bl&&b<bh))
{
newpic.SetPixel(x, y, Color.FromArgb(a, rs2, gs2, bs2));
}
else
{
newpic.SetPixel(x, y, Color.FromArgb(a, rs3, gs3, bs3));
}
}
}
}
private void button1_Click(object sender, EventArgs e)
{
ictureBox1.Image =newpic; ////******PROBLEM*****newpic red underline
}
}
}
答案 0 :(得分:1)
您应该将变量newpic
设置为button1_Click
事件的变量,而不是事件Form1
的变量{} p>
Form1_Load