关于画图

rock1981 2003-10-19 04:40:10
在c++里面有反色,不知道c#里面是否也有,有的话请问一下是哪个方法
...全文
89 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
rock1981 2003-10-23
  • 打赏
  • 举报
回复
谢谢各位的帮忙!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<-------------
wideroad 2003-10-19
  • 打赏
  • 举报
回复
to qiuji:
你这种方法感觉有点麻烦,c#中应该由简单点儿的方法
qiuji 2003-10-19
  • 打赏
  • 举报
回复
to rock1981():
我刚才的方法是在WinForm中实现的,WebForm类似。
在VS.NET的“解决方案资源管理器”中,点击项目名称->右键->属性。
在弹出的窗口中,选择“配置属性”->“生成”,在右边将“允许不安全代码块”设置为True
这个在Web应用程序中也要设置。

to kuangren(J※今天逃课~『天若有情天亦老』) :
我刚才的方法就是使用GDI+。
kuangren 2003-10-19
  • 打赏
  • 举报
回复
有,这是GDI+的内容,c#windows程序设计里面说得很清楚
rock1981 2003-10-19
  • 打赏
  • 举报
回复
但我要把这做成UserControl放到web上就会出现安全性问提,
请问还有别的方试吗???
qiuji 2003-10-19
  • 打赏
  • 举报
回复
注意:
1.在VS.NET的“解决方案资源管理器”中,点击项目名称->右键->属性。
在弹出的窗口中,选择“配置属性”->“生成”,在右边将“允许不安全代码块”设置为True
2.设置你的图片的位置,我的代码中设置为C:\aa.jpg,你可以修改

现在,编译、运行,点击button1后,就看到图片的反色效果了!
qiuji 2003-10-19
  • 打赏
  • 举报
回复
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();
}

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧