急急急!大家伙帮帮忙!在线等待!

youyou1008 2003-06-03 05:10:47


下面一段代码是将图片框中的图像缩放,但是在实际运行过程中,出现的现象是只有一部分放大,而其余部分则大小不变,请问各位高手错在哪里?小弟不太会用api函数,要整体放大该怎么办?


Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc 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 nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
Private Declare Function SetStretchBltMode Lib "gdi32" (ByVal hdc As Long, ByVal nStretchMode As Long) As Long


Private Sub Command1_Click()


n = Val(Text1.Text)
zoomwidth = n * BoxPic.ScaleWidth
zoomheight = n * BoxPic.ScaleHeight

SetStretchBltMode BoxPic.hdc, STRETCH_DELETESCANS

StretchBlt picture1.hdc, 0, 0, zoomwidth, zoomheight, picture1.hdc, 0, 0, BoxPic.ScaleWidth, BoxPic.ScaleHeight, SRCCOPY

End Sub
...全文
18 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
monglihong 2003-06-03
  • 打赏
  • 举报
回复
关注
rainstormmaster 2003-06-03
  • 打赏
  • 举报
回复
StretchBlt:
【VB声明】
Private Declare Function StretchBlt Lib "gdi32" Alias "StretchBlt" (ByVal hdc 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 nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long

【说明】
将一幅位图从一个设备场景复制到另一个。源和目标DC相互间必须兼容。这个函数会在设备场景中定义一个目标矩形,并在位图中定义一个源图象。源矩形会根据需要进行伸缩,以便与目标矩形的大小相符

【返回值】
Long,非零表示成功,零表示失败。会设置GetLastError

【备注】
可用GetDeviceCaps函数判断特定的设备场景是否支持此函数
不可选择对源位图进行剪切或旋转处理,源位图也不能是一个图元文件设备场景

【参数表】
hdc ------------ Long,目标设备场景

x,y ------------ Long,目标矩形左上角的x,y坐标,以逻辑坐标表示

nWidth,nHeight - Long,目标矩形的宽度和高度,以逻辑坐标表示

hSrcDC --------- Long,源设备场景。如光栅运算未指定一个源,则这个参数应为零

xSrc,ySrc ------ Long,用源DC的逻辑坐标表示的源矩形左上角位置

nSrcWidth,nSrcHeight - Long,分别指定用逻辑单位(以源DC为基础)传输的一幅图象的宽度和高度。如其中有一个参数的符号(指正负号)与对应的目标参数不符,位图就会在对应的轴上作镜像转换处理

dwRop ---------- Long,传输过程中进行的光栅运算。如刷子属于光栅运算的一部分,就使用选入目标DC的刷子

youyou1008 2003-06-03
  • 打赏
  • 举报
回复
源代码是这样的,我给弄错了,而且我并不是要实现图像复制而是图像的缩放????

StretchBlt BoxPic.hdc, 0, 0, zoomwidth, zoomheight, BoxPic.hdc, 0, 0, BoxPic.ScaleWidth, BoxPic.ScaleHeight, SRCCOPY
youyou1008 2003-06-03
  • 打赏
  • 举报
回复
问题在于我是将用pset()函数在picturebox中做的图进行缩放,而image控件是不能使用pset函数的,我的目的是将picturebox中的图像进行缩放。
rappercn 2003-06-03
  • 打赏
  • 举报
回复
http://search.csdn.net/expert/topic/51/5101/2002/8/29/981403.htm
Sean918 2003-06-03
  • 打赏
  • 举报
回复
StretchBlt picture1.hdc, 0, 0, zoomwidth, zoomheight, picture1.hdc, 0, 0,
^^^^^^^^^^^^^
BoxPic.ScaleWidth, BoxPic.ScaleHeight, SRCCOPY

仔细看看参数的意思

既然是图形的复制,当然会有源和目的之分

你两个设备场景都是用的目的设备场景的句柄( picture1.hdc),怎么会不错?

使用 API 前最好先好好看看说明帮助


上面的改为:

StretchBlt picture1.hdc, 0, 0, zoomwidth, zoomheight, BoxPic.hdc, 0, 0, BoxPic.ScaleWidth, BoxPic.ScaleHeight, SRCCOPY
bydisplay 2003-06-03
  • 打赏
  • 举报
回复
去http://www.china-pub.com/computers/emook/0290/info.htm看看
bydisplay 2003-06-03
  • 打赏
  • 举报
回复
http://www.yesky.com/20000630/89467.shtml

7,763

社区成员

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

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