回 帖 发 新 帖 刷新版面

主题:如何才能把内存中的大图全部保存到一个文件里?

各位大侠:
  我用内存dc绘图,我的图片大小为1400*1400像素,然后用BITBLT拷贝到PictureBox上显示,现在我想把内存图形的大图(1400*1400像素)保存到一个文件里,但是我保存的文件里图形只见到屏幕可见范围(如1024*768),超过1024*768的地方是空白的,那么用什么方法可以保存超过屏幕可见范围的图片信息?或是如何才能把内存中的大图全部保存到一个文件里?
Private Sub Form_Load()
   Picture1.Height = 21000 '1400像素
   Picture1.Width =  21000 '1400像素
   Picture1.ScaleWidth = 2002
   Picture1.ScaleHeight = 2002
 End Sub
 
 Private Sub Command6_Click()  '保存为文件
   rem 现在我想把内存图形的大图(1400*1400像素)保存到一个文件里,
   rem 但是我保存的文件里图形只见到屏幕可见范围(如1024*768),
   rem 超过1024*768的地方是空白的,Picturebox民族尺寸小于屏幕则没有这种情况,
  rem 那么用什么方法可以保存超过屏幕可见范围的图片信息?或是如何才能把内存
   rem 中的大图全部保存到一个文件里?
   Dim PictureFile As String
   PictureFile = "d:\123.jpg"
   SavePicture Picture1.Image, PictureFile
  End Sub


Private Sub DisplayDataVersion1()
      Picture1.Visible = False
      Dim Cpen As Long
      Dim hRgn As Long
      Dim hBrush As Long
      dc = CreateCompatibleDC(Picture1.hdc)         '创建一个与窗体相兼容的设备场景
      hBmp = CreateCompatibleBitmap(dc, Picture1.ScaleWidth, Picture1.ScaleHeight)       '在内存中创建与窗体同样大小的位图
      SelectObject dc, hBmp      '将位图选入刚才创建的设备场景中
      hBrush = CreateSolidBrush(Picture3.BackColor)   ' (RGB(255, 255, 255))   '                        '用纯红色创建一个实色画刷
      hRgn = CreateRectRgn(0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight)           '创建一个与窗体同样大小的矩形区域
      FillRgn hdc, hRgn, hBrush             '用创建的画刷对该区域进行填充
      DeleteObject hRgn   '删除以前创建的对像用于释放内存
      DeleteObject hBrush
      DeleteObject hBmp
      DeleteDC dc
'省略上面这段则下一幅图会在这辐图基础上画

    dc = CreateCompatibleDC(Picture1.hdc)         '创建一个与窗体相兼容的设备场景
    hBmp = CreateCompatibleBitmap(dc, Picture1.ScaleWidth, Picture1.ScaleHeight)       '在内存中创建与窗体同样大小的位图
    SelectObject dc, hBmp        '将位图选入刚才创建的设备场景中
    .......画图部分,没有问题(用到API SetPixel,LineToEx等)
   rem 现在我想把内存图形的大图(1400*1400像素)拷贝到picturebox上显示,
   rem 但是我只见到屏幕可见范围(如1024*768),超过1024*768的地方是看不到的
   rem 现在如何才能把内存中的大图全部保存到一个文件里?Command6_Click有问题或是下面这行有问题
    Call BitBlt(Picture1.hdc, 0, 0, Picture1.ScaleWidth, Picture1.ScaleHeight, hdc, 0, 0, vbSrcCopy)      '将内存位图中的图形拷贝到picturebox上显示
  
    DeleteObject (hBmp)
    DeleteDC dc
    DeleteObject Cpen
End Sub

  谢谢

回复列表 (共6个回复)

沙发

 

板凳

?
要说什么?

把你的代码传上来才有人帮忙改D。

3 楼

如果你要用picture.image,那么piturebox也需要1400*1400那么大& 设定picture.autoredraw=t.
picturebox.picture 和image是不一样的
为什么要用picture.savepicture呢,既然你能读取内存数据,何不自己写代码存成自己想要的文件格式?

4 楼

Picture1.Height = 21000 '1400像素

既然是绘图,最好设成scalemode=3

5 楼

[quote]如果你要用picture.image,那么piturebox也需要1400*1400那么大& 设定picture.autoredraw=t.
picturebox.picture 和image是不一样的
为什么要用picture.savepicture呢,既然你能读取内存数据,何不自己写代码存成自己想要的文件格式?[/quote]
自己如何写代码存成自己想要的文件格式?
另外 SavePicture Picture1.Picture, "文件名" '出错:无效属性值

6 楼

因为你没有设定 picture1.picture..........那肯定出错
看下这里:
http://topic.csdn.net/t/20060711/23/4874379.html

我来回复

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