主题:[讨论]关于.NET中图形图象处理的问题,高手进
LostAbaddon
[专家分:40] 发布于 2006-12-13 13:59:00
我有一个程序,是用VB.NET2003写的,也做了VC#2003的版本,功能是画图和图象处理,但是功能上都做好以后才发现我忽略了几个很严重的问题,望大家能帮忙!谢谢啊!!!
1,我在程序上画完了图(是随意画的,没有预先内容),然后把程序最小化再打开,发现东西都没了!请问我应该怎么办啊?在PAINT事件中有e.Graphic,但是由于都是随意画的,也不可能把所有命令在PAINT事件中重做一遍啊。望高手帮忙。
2,我画完的图是在PICTUREBOX的CREATEGRAPHIC上的,如何保存为我们正常看到的图片?比如我想保存为BMP,JPG和GIF,有什么办法吗?望高人指点。
3,我想把CREATEGRAPHIC上的内容指定为另一个窗体的背景,应该怎么做?似乎没有从GRAPHIC转换到IMAGE或者STREAM或者BITMAP的方法啊,至少我从来没找到过。望超人协助。
回复列表 (共7个回复)
沙发
薛一刀 [专家分:220] 发布于 2006-12-17 18:02:00
回答你第一个问题;
最小化再最大化以后,窗体会被重绘制
所以,在最小化的时候,比必须把你化好的层,先保存到一个全局对象里面
当最大化以后,再从那个对象里面读出图象!!
具体代码不提供
后面两个问题我也不知道。。。
板凳
LostAbaddon [专家分:40] 发布于 2006-12-17 18:48:00
能不能说得在具体一点?
比如,你所说的层是GRAPHIC吗?如何保存一个GRAPHIC到公有?又如何把一个公有GRAPHIC调回到FORM的CREATEGRAPHIC中?在PAINT事件中e.graphic为readonly的,而FORM的CREATEGRAPIC不能赋值。
所以你提供的思路我暂时无法实现。
说句题外话,绘图方面感觉.NET普遍比VS6差。6中很容易实现的功能在.NET中要大绕圈子。这是进步吗?
3 楼
jzyray [专家分:20610] 发布于 2006-12-17 19:45:00
先创建Bitmap,然后再利用Graphics.FromImage(该Bitmap)。
之后所有的操作就相当于在Bitmap上操作。
PictureBox.Image = 该Bitmap
就把图像放进去了
4 楼
LostAbaddon [专家分:40] 发布于 2006-12-17 21:32:00
这个,你确定吗?
我用这个方法试过,但是一点反应都没有。
用来保存图片的话图片依然是一片空白。
我不知道是不是我的方法有问题,能不能给个例子?下面是我的CODE:
Namespace Spread
Public Class FrmMain
Inherits System.Windows.Forms.Form
Private DH As Graphics
Private TB As Bitmap
#Region " Windows 窗体设计器生成的代码 "
Public Sub New()
MyBase.New()
InitializeComponent()
DH = PictureBox1.CreateGraphics
TB = New Bitmap(PictureBox1.Width, PictureBox1.Height, Imaging.PixelFormat.Format64bppPArgb)
DH.FromImage(TB)
End Sub
'窗体重写 dispose 以清理组件列表等,CODE略。
#End Region
Private Sub FrmMain_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
PictureBox1.Image = TB
End Sub
Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
DH.FillRectangle(New SolidBrush(Color.Green), 0, 0, 100, 100)
End Sub
Private Sub FrmMain_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Click
TB.Save("a.bmp")
End Sub
End Class
End Namespace
5 楼
LostAbaddon [专家分:40] 发布于 2006-12-24 13:24:00
还是没人能回答我的问题吗?
上次的解决方案经过试验并不可行啊.
这么难道真没高手吗?
不管什么语言都可以,只要是.NET就成.
6 楼
jzyray [专家分:20610] 发布于 2006-12-24 19:26:00
不需要用PictureBox来CreateGraphics
直接Graphics g = Graphics.FromImage(...);
7 楼
LostAbaddon [专家分:40] 发布于 2006-12-25 02:07:00
在jzyray的提示下,问题解决了,在此感谢jzyray朋友的帮助。
不过现在遇到一个小问题:我在保存完一次图片以后想再以这个文件名保存一次图片,却出现了问题,一直显示一下错误:
未处理的“System.Runtime.InteropServices.ExternalException”类型的异常出现在 system.drawing.dll 中。
其他信息: GDI+ 中发生一般性错误。
请问这是什么原因呢?应该怎么解决啊?
再次感谢帮助我的朋友们。
我来回复