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();
}

解决方案 »

  1.   

    注意:
    1.在VS.NET的“解决方案资源管理器”中,点击项目名称->右键->属性。
    在弹出的窗口中,选择“配置属性”->“生成”,在右边将“允许不安全代码块”设置为True
    2.设置你的图片的位置,我的代码中设置为C:\aa.jpg,你可以修改现在,编译、运行,点击button1后,就看到图片的反色效果了!
      

  2.   

    但我要把这做成UserControl放到web上就会出现安全性问提,
    请问还有别的方试吗???
      

  3.   

    有,这是GDI+的内容,c#windows程序设计里面说得很清楚
      

  4.   

    to rock1981():
    我刚才的方法是在WinForm中实现的,WebForm类似。
    在VS.NET的“解决方案资源管理器”中,点击项目名称->右键->属性。
    在弹出的窗口中,选择“配置属性”->“生成”,在右边将“允许不安全代码块”设置为True
    这个在Web应用程序中也要设置。to kuangren(J※今天逃课~『天若有情天亦老』) :
    我刚才的方法就是使用GDI+。
      

  5.   

    to qiuji:
    你这种方法感觉有点麻烦,c#中应该由简单点儿的方法
      

  6.   

    谢谢各位的帮忙!qiuji 的那种方法按正常角度来说因该是可以的,
    但在我机子上还是会出现安全问题.所以另找了方法()..
    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<-------------