C_Sharp 板


LINE

※ 引述《amen1387 (MyBad)》之铭言: : ※ 引述《fantoccini (失控的颜色)》之铭言: : : 这几天为了写视窗开始学C# : : 再练习的时候遇到一个问题 : : 例如我要画一个矩形 : : 当Mouse按下後 然後移动 然後放开 : : 最後的结果是一个矩形 但是 : : 我的滑鼠在移动的过程中 无法看出 : : 这个矩形跟随着你的滑鼠移动 : : 简单的说 就是小画家 圈选矩形的那个功能 : : 感觉上是要一直重绘 不知道是不是这样 : 我把drawline写在mouse_up的话,就跟原本楼主的问题一样,但试着写在mouse_move他就 : 会一直出现 : 我现在有想到的方式是在mousedown的时候把picture box撷取起来 : Bitmap lastimage=new Bitmap(picturebox1.width,picturebox1.height); : Garphcs Imagegrapics=Graphics.FromImage(lastimage); : 然後在mousemove时 : Graphics p =pictureBox1.CreateGraphics(); : if(e.Button==MouseButton.Left) : { : p=image graphics; : p.DrawLine(pen1,downX,downY,e.X,e.Y); : } : 可是这样写连画出来都没有,不知道哪里出了问题 : 。 我用两张Bitmap在MouseMove和MouseUp交互替换PictureBox.Image MouseMove时先用MouseDown时先存过的Bitmap做刷新 Graphics G; Point P; Bitmap Bmp1, Bmp2; bool mouseDown = false; private void Form1_Load(object sender, EventArgs e) { Bmp1 = new Bitmap(pictureBox1.Width,pictureBox1.Height); pictureBox1.Image = Bmp1; } private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { P = e.Location; mouseDown = true; } private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { if (mouseDown) { Bmp2 = (Bitmap)Bmp1.Clone(); G = Graphics.FromImage(Bmp2); pictureBox1.Image = Bmp2; Draw(e); } } private void pictureBox1_MouseUp(object sender, MouseEventArgs e) { mouseDown = false; pictureBox1.Image = Bmp1; G = Graphics.FromImage(Bmp1); Draw(e); } void Draw(MouseEventArgs e) { Point P1 = P; Point P2 = e.Location; float width = P2.X - P1.X; float height = P2.Y - P1.Y; int tmp; if (width < 0) { tmp = P2.X; P2.X = P1.X; P1.X = tmp; width = -width; } if (height < 0) { tmp = P2.Y; P2.Y = P1.Y; P1.Y = tmp; height = -height; } G.DrawRectangle(new Pen(Brushes.Black), P1.X, P1.Y, width, height); } --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.143.9.68 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1563693019.A.938.html
1F:推 ideaup: move时只画在bmp2 上且显示它,好像可以,很简单 07/21 18:54
2F:→ ideaup: 每次move都要做,bmp1.clone()+bmp2.dispose(),费时 07/21 19:27
3F:推 anumis: 宣告2张 bmp,一张拿来显示,一张拿来绘图,进到 paint 时 07/22 10:56
4F:→ anumis: ,先把图2清空後再做绘图程式码,等东西都完完後,图1再清 07/22 10:56
5F:→ anumis: 空把图2画上去 07/22 10:56
6F:→ anumis: 你要有个概念,一但进了 picturebox 之类的"萤幕显示型元 07/22 10:56
7F:→ anumis: 件",那就要跟实际硬体做io,速度就不比你在记忆体内处理 07/22 10:56
8F:→ anumis: 了,所以才需要分成"表层/理层"的方式去做,市面上所有游 07/22 10:56
9F:→ anumis: 戏引擎都是这麽干的。 07/22 10:57
10F:→ anumis: 然後没必要做 dispose,直接同一个记忆体区域重复利用就好 07/22 10:59
11F:→ anumis: ,可可省掉一直重复宣告记/释放忆体空间的时间 07/22 10:59
12F:→ feobzq: 两位大大说的都看得懂,只是要怎麽修比较好?(若不用WinAPI 07/22 22:20
13F:→ anumis: 我讲的是方法,实做就用内建的 Graphic + bitmap 做就好了 07/27 14:33







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP