vb中如何让picturebox画出的图形保存为图片格式

coffeekane 2005-06-09 01:47:22
问:我在picturebox控件中用line\circle等绘图命令画出图形后,希望将得到的图形保存为jpg\gif等图片格式,如何实现?请教各位大虾们!:)谢!!

pls:用如下程序得到的只是空白图。请大虾们看看我下面的程序有什么问题:)

Private Sub Command2_Click()
Call SavePic("D:\毕设答辩准备\vb\vb保存pic", "good.jpg")
End Sub

Public Function SavePic(PicPath As String, PicName As String)
'调用绘图程序来保存图片
Dim RTV

Dim i, j As Integer
Dim fso As New FileSystemObject
RTV = Shell("mspaint.exe", vbMaximizedFocus) ' 激活绘图程序。
'Sleep (1000)
AppActivate RTV, True
SendKeys "^v", True '粘贴完毕
SendKeys "%f", True '保存图片
SendKeys "^a", True
SendKeys PicPath & "\" & PicName, True '保存路径和名称
If fso.FileExists(PicPath & "\" & PicName) = True Then '检测图片是否存在
SendKeys "{TAB}", True
SendKeys "{TAB}", True
SendKeys "{ENTER}", True
SendKeys "{TAB}", True
SendKeys "{ENTER}", True
Else
SendKeys "{ENTER}", False
SendKeys "{ENTER}", False
End If
SendKeys "%{F4}", True
Clipboard.Clear
End Function
...全文
1346 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
coffeekane 2005-06-15
  • 打赏
  • 举报
回复
谢谢各位大虾提供的参考!现已成功实现。
就此结贴!
再谢各位!
_西瓜皮_ 2005-06-09
  • 打赏
  • 举报
回复


VB本身不允许你将一个Form?UserControl或PictureBox上的完整图片复制到剪贴板?
如果你使用Clipboard.SetData,将只复制被载入这个对象的位图。通过使用API方法,
你可以超越这个限制,保证全部内容都被复制,包括你刚刚画上的任何图形。
开始一个新项目,在窗体上放置一个Command和一个PictureBox。将PictureBox的Autoredraw属性设为1。
然后添加一个标准模块,把以下代码复制进去。


Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

'GDI函数:
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 Const SRCCOPY = &HCC0020 ' (DWORD) dest = source
'创建一个memory DC:
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hDC As Long) As Long
'在memory中建立一个位图:
Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hDC As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
'把一个GDI对象放入DC,返回原先的那个:
Private Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long
'删除GDI对象:
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long

'剪贴板函数:
Private Declare Function OpenClipboard Lib "USER32" (ByVal hWnd As Long) As Long
Private Declare Function CloseClipboard Lib "USER32" () As Long
Private Declare Function SetClipboardData Lib "USER32" (ByVal wFormat As Long, ByVal hMem As Long) As Long
Private Declare Function EmptyClipboard Lib "USER32" () As Long
Private Const CF_BITMAP = 2


Public Function CopyEntirePicture(ByRef objFrom As Object) As Boolean
Dim lhDC As Long
Dim lhBMP As Long
Dim lhBMPOld As Long

'在内存中建立一个指向我们将要复制对象的DC:
lhDC = CreateCompatibleDC(objFrom.hDC)
If (lhDC <> 0) Then
'建立一张指向将要复制对象的位图:
lhBMP = CreateCompatibleBitmap(objFrom.hDC, objFrom.ScaleWidth \ Screen.TwipsPerPixelX, objFrom.ScaleHeight \ Screen.TwipsPerPixelY)
If (lhBMP <> 0) Then
'把位图选入我们刚才建立的DC中,并贮存原先在那里的老位图:
lhBMPOld = SelectObject(lhDC, lhBMP)

'把objFrom的内容复制到建立的位图里:
BitBlt lhDC, 0, 0, objFrom.ScaleWidth \ Screen.TwipsPerPixelX, objFrom.ScaleHeight \ Screen.TwipsPerPixelY, objFrom.hDC, 0, 0, SRCCOPY

'恢复DC中的内容:
SelectObject lhDC, lhBMPOld

'现在把位图装入剪贴板:
EmptyClipboard
OpenClipboard 0
SetClipboardData CF_BITMAP, lhBMP
CloseClipboard

'我们在这里不用删除建立的位图——
'它现在属于剪贴板,当剪贴板变化时,Windows将为我们删除它。
End If

'清除刚才建立的DC:
DeleteObject lhDC
End If
End Function

'为了试验这个方法,把这些代码加入窗体:
Private Sub Command1_Click()
CopyEntirePicture Picture1
End Sub

Private Sub Command2_Click()
SavePicture Clipboard.GetData, "D:\12.bmp"
End Sub

Private Sub Form_Load()
Dim i As Long
'在PictureBox中画些东西:
With Picture1.Font
.Name = "Arial"
.Bold = True
.Size = 12
End With
For i = 1 To 20
Picture1.ForeColor = QBColor(i Mod 15)
Picture1.Print "http://www.archtide.com"
Next i
End Sub

窗体加载后,PictureBox中将会有一些文本。当你点击Command后,
PictureBox中的全部内容都将会被复制到剪贴板里,你可以把它粘贴到别的程序里,
比如画笔、Word等等。


VBToy 2005-06-09
  • 打赏
  • 举报
回复
如果在xp下可用GDI+的API将绘制的图形保存为jpg格式。否则,找将BMP保存为JPG的源代码或dll。
下载代码方式:https://pan.quark.cn/s/28492da20c79 依据所提供的文件资料,本资源将系统地探讨FPGA(即现场可编程门阵列)的核心概念、其在视频图像技术领域的入门及进阶知识要点,以及图像处理算法的实现方法。此外,还将对VIPBoardBig这一特定FPGA开发板的详细资料和使用途径进行深入剖析。 FPGA的入门与进阶学习主要涉及以下核心内容: 1. FPGA的基础概念:FPGA是一种能够通过编程进行配置的集成电路,主要目的是达成硬件逻辑的可重构特性。该类芯片由大量的可配置逻辑模块(CLB)、输入输出模块(IOB)以及可编程互连资源共同构成。 2. FPGA开发板与相关套件:FPGA开发板是一种用于FPGA芯片学习和测试的硬件平台,通常配备有基础的外设设备,例如LED指示灯、按键开关、LCD显示屏、串口通信接口等。套件则通常包含硬件板卡、技术文档、相关资源,以及可能的软件工具和示例代码集。VIPBoardBig即为本教程选用的FPGA开发板,拥有特定的硬件配置和功能特性。 3. FPGA的开发流程:FPGA开发一般涉及硬件描述语言(HDL)的设计与仿真阶段,常用语言为Verilog或VHDL。随后,借助综合工具将设计蓝图转化为FPGA内部的逻辑网络,最终通过编程设备将配置文件传输至FPGA芯片,从而实现设计的预期功能。 4. 外设开发与设计工作:涵盖LED显示控制、键盘驱动、LCD显示驱动、UART串口设计等基础外设的开发任务。这部分知识将引导学习者掌握如何在FPGA平台上管理和运用这些基础外设。 5. VGA驱动显示与字符显示测试:VGA(Video Graphics Array)是一种视频传输接口标准,能够支持640x480...
内容概要:本文系统阐述了企业在搭建官方知识库后如何通过“7步锚定法”实现GEO(生成式引擎优化)的落地,重点在于从知识库走向内容矩阵的战略升级。文章指出知识库仅为起点,真正的核心是让大模型“信任并推荐”企业内容。为此提出“一个主战场+多个品牌布局”的策略,强调需根据行业特性选择高商业流量的大模型(如豆包、文心一言、通义千问等),而非工具性模型(如ChatGPT、Claude)。通过业务场景画像、大模型流量测绘、采信逻辑拆解、内容架构设计、语义关键词埋点、信源建设与效果迭代七步法,构建高质量、高可信度的内容体系,并警惕“全模型覆盖、内容堆砌、一套内容通用、忽视第三方平台”四大误区。最终指出GEO本质是一场认知战,比拼的是对大模型逻辑与客户需求的理解深度及长期主义投入。; 适合人群:已完成官方知识库搭建、希望提升AI引用率与获客效率的企业市场负责人、品牌运营、数字营销从业者及SEO/GEO优化相关人员。; 使用场景及目标:①指导企业科学选择主攻大模型并制定差异化内容策略;②构建符合大模型采信逻辑的高质量内容矩阵;③避免常见GEO落地误区,提升AI搜索下的品牌曝光与转化效果;④建立可持续优化的数据反馈闭环。; 阅读建议:建议结合自身行业特征与客户决策路径,逐步实践“7步法”,优先聚焦单一主战场打透,注重内容质量与第三方权威信源建设,坚持3-6个月持续投入以观察真实效果。

7,787

社区成员

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

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