在VB中怎样将PictureBox内显示的内容(包括里边的控件)保存为图片文件?

用Picture1.Image只能得到PictureBox的图像,我在把PictureBox里边控件的样子也要出现在图片中,请问这应该怎样弄?
ldc4399,很感谢你,同时指出一下你Picture1.Left和Picture1.Top后忘加/15了。
我明白你的原理,你是利用截屏吧,现在问题是,我现在是Picture1中含有Picture2,Picture2加载了很大的图片,含有各种控件,程序中是需要拖动Picture2来一部分一部分地显示的。我现在要将整个Picture2的内容保存为图片,按你这个方法,恐怕就不行了。

在VB中将PictureBox内显示内容(包含里面加载的控件)保存为图片文件需要使用多个API函数来实现。被保存的图片是bmp格式的。

实现代码:

Option Explicit
    Private Const BI_RGB = 0&
    Private Const DIB_RGB_COLORS = 0
    Private Const BITMAPTYPE = &H4D42
    Private Const INVALID_HANDLE_VALUE = (-1)
    Private Const GENERIC_WRITE = &H40000000
    Private Const CREATE_ALWAYS = 2
    Private Type BITMAPINFOHEADER '40 bytes
        biSize As Long
        biWidth As Long
        biHeight As Long
        biPlanes As Integer
        biBitCount As Integer
        biCompression As Long
        biSizeImage As Long
        biXPelsPerMeter As Long
        biYPelsPerMeter As Long
        biClrUsed As Long
        biClrImportant As Long
    End Type
    Private Const FILE_ATTRIBUTE_NORMAL = &H80
    Private Type RGBQUAD
        rgbBlue As Byte
        rgbGreen As Byte
        rgbRed As Byte
        rgbReserved As Byte
    End Type
    Private Type BITMAPINFO
        bmiHeader As BITMAPINFOHEADER
        bmiColors As RGBQUAD
    End Type
    Private Type BITMAPFILEHEADER
        bfType As Integer
        bfSize As Long
        bfReserved1 As Integer
        bfReserved2 As Integer
        bfOffBits As Long
    End Type
    Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
    Private Declare Function CreateDIBSection Lib "gdi32" (ByVal hdc As Long, pBitmapInfo As BITMAPINFO, ByVal un As Long, lplpVoid As Long, ByVal handle As Long, ByVal dw As Long) As Long
    Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
    Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
    Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
    Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Long) As Long
    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
    Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
    Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long

Private Sub CmdSave_Click()
    '保存转换后的图像
    Dim hmemDC As Long
    Dim hmemBMP As Long
    Dim lpmemBits As Long
    Dim bmp_info As BITMAPINFO
    Dim hFile As Long
    Dim bmpfile_info As BITMAPFILEHEADER
    Dim lpBytesWritten As Long
    Picture1.ScaleMode = vbPixels
    With bmp_info.bmiHeader
        .biSize = LenB(bmp_info.bmiHeader)
        .biWidth = Picture1.ScaleWidth
        .biHeight = Picture1.ScaleHeight
        .biPlanes = 1
        .biBitCount = 24
        .biCompression = BI_RGB
        .biSizeImage = .biHeight * (((.biWidth * .biBitCount + 31) And &HFFFFFFE0) \ 8)
    End With
    hmemDC = CreateCompatibleDC(Picture1.hdc)
    hmemBMP = CreateDIBSection(Picture1.hdc, bmp_info, DIB_RGB_COLORS, lpmemBits, 0, 0)
    SelectObject hmemDC, hmemBMP
    BitBlt hmemDC, 0, 0, bmp_info.bmiHeader.biWidth, bmp_info.bmiHeader.biHeight, Picture1.hdc, 0, 0, vbSrcCopy
    '保存图片
    hFile = CreateFile(App.Path & "\test.bmp", GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)
    If hFile <> INVALID_HANDLE_VALUE Then
        With bmpfile_info
            .bfType = BITMAPTYPE
            .bfOffBits = 14 + bmp_info.bmiHeader.biSize
            .bfSize = .bfOffBits + bmp_info.bmiHeader.biSizeImage
        End With
        WriteFile hFile, bmpfile_info.bfType, 2, lpBytesWritten, 0
        WriteFile hFile, bmpfile_info.bfSize, 12, lpBytesWritten, 0
        WriteFile hFile, bmp_info.bmiHeader, bmp_info.bmiHeader.biSize, lpBytesWritten, 0
        WriteFile hFile, ByVal lpmemBits, bmp_info.bmiHeader.biSizeImage, lpBytesWritten, 0
        CloseHandle hFile
    End If
    DeleteObject hmemBMP
    DeleteDC hmemDC
End Sub
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2020-03-15
Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hdc As Long) As Long
Private Sub Command1_Click()
Dim hdc As Long
hdc = GetDC(0)
BitBlt Picture2.hdc, 0, 0, Me.Picture1.Width, Picture1.Height, hdc, Me.Left / 15 + 8 + Picture1.Left, Me.Top / 15 + 30 + Me.Picture1.Top, vbSrcCopy
ReleaseDC 0, hdc
End Sub一个按钮 两个picturebox

不知你有没有边框。。我这个是加了边框的(边框就是标题栏什么的。。)不加边框的话把8,30去掉即可。。
还有假如是.net的改的就多了。。不知需要否。。本回答被提问者采纳

在VB中怎样将PictureBox内显示的内容(包括里边的控件)保存为图片文件...
在VB中将PictureBox内显示内容(包含里面加载的控件)保存为图片文件需要使用多个API函数来实现。被保存的图片是bmp格式的。 实现代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48...

在VB中怎样将PictureBox内显示的内容(包括里边的控件)保存为图片文件...
picturebox控件,可以实现截屏保存。手动绘制的图案的属性是image,这个属性受自动重绘设置控制,当设为假时,WINDOWS 仅临时输出,并不保存到内存里,截图,覆盖都会导致 图像消失。当设为真时,WINDOWS会建议对应的缓冲区,图像会保存在内存里,能被截图,覆盖时,会自动调用内存的内存进行重新绘图 ...

vb 如何把窗口内容保存为图片
theForm, 0, 0) '截取活动的本窗体,若theForm改成theScreen则Copy整个Screen DoEvents Picture1.Picture = Clipboard.GetData(vbCFBitmap) 'Picture1.Picture得到剪切板的内容(截取的本窗体) Clipboard.ClearPhotoName = "\\VB截图.Bmp" PhotoName1 = App.Path & PhotoName SavePict...

在VB中怎样将PictureBox内显示的内容(包括里边的控件)保存为图片文件...
Private Sub Command1_Click()Dim hdc As Long hdc = GetDC(0)BitBlt Picture2.hdc, 0, 0, Me.Picture1.Width, Picture1.Height, hdc, Me.Left \/ 15 + 8 + Picture1.Left, Me.Top \/ 15 + 30 + Me.Picture1.Top, vbSrcCopy ReleaseDC 0, hdc End Sub一个按钮 两个picturebox 不...

怎么在VB中将picturebox控件中的内容保存为图片?
VB6.0可使用SavePicture 语句来保存PictureBox 控件中的内容为图片:1)SavePicture 语句,从对象或控件(如果有一个与其相关)的 Picture 或 Image 属性中将图形保存到文件中。说明:无论在设计时还是运行时图形从文件加载到对象的 Picture属性,而且它是位图、图标、元文件或增强元文件,则图形将以原始...

如何将vb中控件的Picture储存为一个bmp文件?
VB6可使用SavePicture 语句来实现将窗体或PictureBox控件的图像储存为位图。SavePicture 语句,从对象或控件(如果有一个与其相关)的 Picture 或 Image 属性中将图形保存到文件中。语法:说明 无论在设计时还是运行时图形从文件加载到对象的 Picture 属性,而且它是位图、图标、元文件或增强元文件,则图形将...

在VB中如何更改picturebox中图片的尺寸,并保存更改后的图片?
VB6.0中可使用PaintPicture 方法在 Form, PictureBox 或 Printer 上绘制图形文件时设置参数更改图片的尺寸。使用SavePicture 语句,从对象或控件(如果有一个与其相关)的 Picture 或 Image 属性中将图形保存到文件中。PaintPicture 方法,用以在 Form, PictureBox 或 Printer 上绘制图形文件(.bmp、.wmf...

用VB怎样生成图片文件?
VB保存控件中的图片用SavePicture 语句 作用:从对象或控件(如果有一个与其相关)的 Picture 或 Image 属性中将图形保存到文件中。语法:SavePicture picture, stringexpression SavePicture 语句的语法包含下面部分:参数 描述 picture 产生图形文件的 PictureBox 控件或 Image 控件。stringexpression 欲保存的...

vb2008中如何从picturebox中保存图片
picturebox.Image.Save("c:\\1.jpg",System.Drawing.Imaging.ImageFormat.Jpeg)

用VB程序在PictureBox控件上画了一个图形,想把它以文件的形式保存起来...
怎么写 你自己看 ,只给说一下过程 对象 Picture1, 设置 autoRedraw=True 保存图片: SavePicture Picture1.image,文件路径 有 了路径 向 ComboBox 添加 装入图片PictureBox.Picture= LoadPicture("图片路径")

相似回答