如何保存图象

zzssyyvc 2000-01-19 07:13:00
我把屏幕当前窗体抓了下来,要把它保存成一个图象文件,但用savepicture时不行,哪位如果知道,希望能指点一二
...全文
277 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Venne 2000-01-28
  • 打赏
  • 举报
回复
其实最简单,设置一个PICTUREBOX的AUTOREDARAW属性为真,然后把你拷贝下来的图使用Bitblt函数拷贝到这个PictureBox的HDC上,最后使用Savepicture(PictureBox.image,文件名)就可以了。
peacock 2000-01-28
  • 打赏
  • 举报
回复
getchunk & appendchunk,以下是msdn的例子。

AppendChunk 和 GetChunk 方法范例
该范例使用 AppendChunk 和 GetChunk 方法用其他记录中的数据填写图像字段。

Public Sub AppendChunkX()

Dim cnn1 As ADODB.Connection
Dim rstPubInfo As ADODB.Recordset
Dim strCnn As String
Dim strPubID As String
Dim strPRInfo As String
Dim lngOffset As Long
Dim lngLogoSize As Long
Dim varLogo As Variant
Dim varChunk As Variant

Const conChunkSize = 100

' 打开连接
Set cnn1 = New ADODB.Connection
strCnn = "Provider=sqloledb;" & _
"Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
cnn1.Open strCnn

' 打开 pub_info 表。
Set rstPubInfo = New ADODB.Recordset
rstPubInfo.CursorType = adOpenKeyset
rstPubInfo.LockType = adLockOptimistic
rstPubInfo.Open "pub_info", cnn1, , , adCmdTable

' 提示复制徽标。
strMsg = "Available logos are : " & vbCr & vbCr
Do While Not rstPubInfo.EOF
strMsg = strMsg & rstPubInfo!pub_id & vbCr & _
Left(rstPubInfo!pr_info, InStr(rstPubInfo!pr_info, ",") - 1) & _
vbCr & vbCr
rstPubInfo.MoveNext
Loop
strMsg = strMsg & "Enter the ID of a logo to copy:"
strPubID = InputBox(strMsg)

' 将徽标复制到大块中的变量。
rstPubInfo.Filter = "pub_id = '" & strPubID & "'"
lngLogoSize = rstPubInfo!logo.ActualSize
Do While lngOffset < lngLogoSize
varChunk = rstPubInfo!logo.GetChunk(conChunkSize)
varLogo = varLogo & varChunk
lngOffset = lngOffset + conChunkSize
Loop

' 从用户得到数据。
strPubID = Trim(InputBox("Enter a new pub ID:"))
strPRInfo = Trim(InputBox("Enter descriptive text:"))

' 添加新记录,将徽标复制到大块中。
rstPubInfo.AddNew
rstPubInfo!pub_id = strPubID
rstPubInfo!pr_info = strPRInfo

lngOffset = 0 ' 重置位移。
Do While lngOffset < lngLogoSize
varChunk = LeftB(RightB(varLogo, lngLogoSize - lngOffset), _
conChunkSize)
rstPubInfo!logo.AppendChunk varChunk
lngOffset = lngOffset + conChunkSize
Loop
rstPubInfo.Update

' 显示新添加的数据。
MsgBox "New record: " & rstPubInfo!pub_id & vbCr & _
"Description: " & rstPubInfo!pr_info & vbCr & _
"Logo size: " & rstPubInfo!logo.ActualSize

' 删除新记录,因为这只是演示。
rstPubInfo.Requery
cnn1.Execute "DELETE FROM pub_info " & _
"WHERE pub_id = '" & strPubID & "'"

rstPubInfo.Close
cnn1.Close

End Sub
liuz 2000-01-24
  • 打赏
  • 举报
回复
你可以用附件里的画图,将抓下为的图粘在新文件中,可存为多种图片格式。好像没毕要搞的那样复杂吧!!
quake3 2000-01-22
  • 打赏
  • 举报
回复
用幕屏剪切的方法,把指定的区域剪切下来,放到剪贴板里,再用
SAVEPICTURE CLIPBOARD.GETDATA(),FILENAME
幕屏剪切程序如下,大本营里已有的

Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long

Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long

Private Declare Function EmptyClipboard Lib "user32" () As Long

Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) As Long

Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long

Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc 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 CreateDC Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, lpInitData As Long) As Long

Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long

Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long

Private Declare Function CloseClipboard Lib "user32" () As Long

函数:

Sub ScrnCap(Lt, Top, Rt, Bot)

rWidth = Rt - Lt

rHeight = Bot - Top

SourceDC = CreateDC("DISPLAY", 0, 0, 0)

DestDC = CreateCompatibleDC(SourceDC)

BHandle = CreateCompatibleBitmap(SourceDC, rWidth, rHeight)

SelectObject DestDC, BHandle

BitBlt DestDC, 0, 0, rWidth, rHeight, SourceDC, Lt, Top, &HCC0020

Wnd = Screen.ActiveForm.hwnd

OpenClipboard Wnd

EmptyClipboard

SetClipboardData 2, BHandle

CloseClipboard

DeleteDC DestDC

ReleaseDC DHandle, SourceDC

End Sub

以下的示例把屏幕图象捕捉后,放到Picture1 中。

Sub Command1_Click()

Form1.Visible = False

ScrnCap 0, 0, 640, 480

Form1.Visible = True

picture1 = Clipboard.GetData()

End Sub
zzssyyvc 2000-01-20
  • 打赏
  • 举报
回复
我就是把图片先给了pictureBOX,在用bitbit函数之前也设了picture的autoredraw=true
但用savepicture还是不行
bamyl 2000-01-20
  • 打赏
  • 举报
回复
你把抓下来的图片先赋给一个Imagebox或PictureBOX,然后再用savepicture保存好了
zyb 2000-01-20
  • 打赏
  • 举报
回复
bamyl的办法虽然有些...但还行!
thriller 2000-01-20
  • 打赏
  • 举报
回复
这其实既复杂又简单。
在本站的源代码部分又详细介绍。
Tyche抓屏助手 就是用VB写的。
不过它可以抓鼠标。这是个秘密。
thriller
lifeng56 2000-01-20
  • 打赏
  • 举报
回复
我疆土靠到picturebox 上用了以下的语句:
SavePicture Form2!Picture1.Image, cm1.filename + ".bmp"
希望读你又帮助
bluewind 2000-01-19
  • 打赏
  • 举报
回复
有没有试过用API?
我是一名初学者
X_Window 2000-01-19
  • 打赏
  • 举报
回复
SavePicture 保存的是 Picture 对象或者Image 对象中的图像,如果是自己画的,将Autoredraw 设为True.

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧