回 帖 发 新 帖 刷新版面

主题:[讨论]关于.NET中图形图象处理的问题,高手进

我有一个程序,是用VB.NET2003写的,也做了VC#2003的版本,功能是画图和图象处理,但是功能上都做好以后才发现我忽略了几个很严重的问题,望大家能帮忙!谢谢啊!!!

1,我在程序上画完了图(是随意画的,没有预先内容),然后把程序最小化再打开,发现东西都没了!请问我应该怎么办啊?在PAINT事件中有e.Graphic,但是由于都是随意画的,也不可能把所有命令在PAINT事件中重做一遍啊。望高手帮忙。

2,我画完的图是在PICTUREBOX的CREATEGRAPHIC上的,如何保存为我们正常看到的图片?比如我想保存为BMP,JPG和GIF,有什么办法吗?望高人指点。

3,我想把CREATEGRAPHIC上的内容指定为另一个窗体的背景,应该怎么做?似乎没有从GRAPHIC转换到IMAGE或者STREAM或者BITMAP的方法啊,至少我从来没找到过。望超人协助。

回复列表 (共7个回复)

沙发

回答你第一个问题;
最小化再最大化以后,窗体会被重绘制
所以,在最小化的时候,比必须把你化好的层,先保存到一个全局对象里面
当最大化以后,再从那个对象里面读出图象!!

具体代码不提供

后面两个问题我也不知道。。。

板凳

能不能说得在具体一点?
比如,你所说的层是GRAPHIC吗?如何保存一个GRAPHIC到公有?又如何把一个公有GRAPHIC调回到FORM的CREATEGRAPHIC中?在PAINT事件中e.graphic为readonly的,而FORM的CREATEGRAPIC不能赋值。
所以你提供的思路我暂时无法实现。


说句题外话,绘图方面感觉.NET普遍比VS6差。6中很容易实现的功能在.NET中要大绕圈子。这是进步吗?

3 楼

先创建Bitmap,然后再利用Graphics.FromImage(该Bitmap)。
之后所有的操作就相当于在Bitmap上操作。

PictureBox.Image = 该Bitmap
就把图像放进去了

4 楼

这个,你确定吗?
我用这个方法试过,但是一点反应都没有。
用来保存图片的话图片依然是一片空白。
我不知道是不是我的方法有问题,能不能给个例子?下面是我的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 楼

还是没人能回答我的问题吗?
上次的解决方案经过试验并不可行啊.
这么难道真没高手吗?

不管什么语言都可以,只要是.NET就成.

6 楼

不需要用PictureBox来CreateGraphics
直接Graphics g = Graphics.FromImage(...);

7 楼

在jzyray的提示下,问题解决了,在此感谢jzyray朋友的帮助。

不过现在遇到一个小问题:我在保存完一次图片以后想再以这个文件名保存一次图片,却出现了问题,一直显示一下错误:
未处理的“System.Runtime.InteropServices.ExternalException”类型的异常出现在 system.drawing.dll 中。
其他信息: GDI+ 中发生一般性错误。

请问这是什么原因呢?应该怎么解决啊?

再次感谢帮助我的朋友们。

我来回复

您尚未登录,请登录后再回复。点此登录或注册