C#也可以实现!
首先,在窗体中添加一个按钮button1
然后添加下面的代码:
using System.Drawing.Imaging;public Bitmap bmp;
private double Zoom = 1.0;private void Form1_Load(object sender, System.EventArgs e)
{
bmp=new Bitmap("C:\\aa.jpg");//设定图片位置
this.AutoScroll = true;
this.AutoScrollMinSize = new Size ((int)(bmp.Width * Zoom), (int)(bmp.Height * Zoom));
this.Invalidate();
}//下面的函数使图片反色,建议不要随便修改
public static bool Invert(Bitmap b)
{
BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); int stride = bmData.Stride;
System.IntPtr Scan0 = bmData.Scan0; unsafe
{
byte * p = (byte *)(void *)Scan0; int nOffset = stride - b.Width*3;
int nWidth = b.Width * 3;
for(int y=0;y<b.Height;++y)
{
for(int x=0; x < nWidth; ++x )
{
p[0] = (byte)(255-p[0]);
++p;
}
p += nOffset;
}
} b.UnlockBits(bmData); return true;
} private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Graphics g = e.Graphics; g.DrawImage(bmp, new Rectangle(this.AutoScrollPosition.X, this.AutoScrollPosition.Y, (int)(bmp.Width*Zoom), (int)(bmp.Height * Zoom)));
}//添加button1的click事件
private void button1_Click(object sender, System.EventArgs e)
{
if(Invert(bmp))
this.Invalidate();
}
首先,在窗体中添加一个按钮button1
然后添加下面的代码:
using System.Drawing.Imaging;public Bitmap bmp;
private double Zoom = 1.0;private void Form1_Load(object sender, System.EventArgs e)
{
bmp=new Bitmap("C:\\aa.jpg");//设定图片位置
this.AutoScroll = true;
this.AutoScrollMinSize = new Size ((int)(bmp.Width * Zoom), (int)(bmp.Height * Zoom));
this.Invalidate();
}//下面的函数使图片反色,建议不要随便修改
public static bool Invert(Bitmap b)
{
BitmapData bmData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); int stride = bmData.Stride;
System.IntPtr Scan0 = bmData.Scan0; unsafe
{
byte * p = (byte *)(void *)Scan0; int nOffset = stride - b.Width*3;
int nWidth = b.Width * 3;
for(int y=0;y<b.Height;++y)
{
for(int x=0; x < nWidth; ++x )
{
p[0] = (byte)(255-p[0]);
++p;
}
p += nOffset;
}
} b.UnlockBits(bmData); return true;
} private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
Graphics g = e.Graphics; g.DrawImage(bmp, new Rectangle(this.AutoScrollPosition.X, this.AutoScrollPosition.Y, (int)(bmp.Width*Zoom), (int)(bmp.Height * Zoom)));
}//添加button1的click事件
private void button1_Click(object sender, System.EventArgs e)
{
if(Invert(bmp))
this.Invalidate();
}
1.在VS.NET的“解决方案资源管理器”中,点击项目名称->右键->属性。
在弹出的窗口中,选择“配置属性”->“生成”,在右边将“允许不安全代码块”设置为True
2.设置你的图片的位置,我的代码中设置为C:\aa.jpg,你可以修改现在,编译、运行,点击button1后,就看到图片的反色效果了!
请问还有别的方试吗???
我刚才的方法是在WinForm中实现的,WebForm类似。
在VS.NET的“解决方案资源管理器”中,点击项目名称->右键->属性。
在弹出的窗口中,选择“配置属性”->“生成”,在右边将“允许不安全代码块”设置为True
这个在Web应用程序中也要设置。to kuangren(J※今天逃课~『天若有情天亦老』) :
我刚才的方法就是使用GDI+。
你这种方法感觉有点麻烦,c#中应该由简单点儿的方法
但在我机子上还是会出现安全问题.所以另找了方法()..
private void drawMoveLine(Image img,Rectangle rec)
{
Bitmap bitImg = new Bitmap(img);
//用于存放象素集合
byte[] bts = new byte[rec.Height*rec.Width];
//获取指定范围的象素并保存
int i=0;//键值
for(int w=rec.X;w<rec.X+rec.Width;w++)
{
for(int h=rec.Y;h<rec.Y+rec.Height;h++)
{
bts[i] = (byte)bitImg.GetPixel(w,h).ToArgb();
}
}
//利用保存好的原象素进行填充
int j=0;//键值
for(int w=rec.X;w<rec.X+rec.Width;w++)
{
for(int h=rec.Y;h<rec.Y+rec.Height;h++)
{
bitImg.SetPixel(w,h,Color.FromArgb(bts[j]));
}
}
Graphics g = GraphPane.CreateGraphics();
//将还原好的图片重新画到gGrp上
//g.DrawImage(img,GraphPane.ClientRectangle);
g.DrawImage(bitImg,recMove,recMove,GraphicsUnit.Pixel);
//画拉动线
g.FillRectangle(brhMove,rec);
//释放自行创建的对象
g.Dispose();
bitImg.Dispose();
}//drawMoveLine<-------------