StretchBlt 函数关于 放缩 翻转

StretchBlt

 
 
StretchBlt
VB声明
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
参数表
参数类型及说明
hdcLong,目标设备场景
x,yLong,目标矩形左上角的x,y坐标,以逻辑坐标表示
nWidth,nHeightLong,目标矩形的宽度和高度,以逻辑坐标表示
hSrcDCLong,源设备场景。如光栅运算未指定一个源,则这个参数应为零
xSrc,ySrcLong,用源DC的逻辑坐标表示的源矩形左上角位置
nSrcWidth,nSrcHeightLong,分别指定用逻辑单位(以源DC为基础)传输的一幅图象的宽度和高度。如其中有一个参数的符号(指正负号)与对应的目标参数不符,位图就会在对应的轴上作镜像转换处理
dwRopLong,传输过程中进行的光栅运算。如刷子属于光栅运算的一部分,就使用选入目标DC的刷子
注解

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

使用StretchBlt产生绘图特效

 

StretchBlt是一个加强Bitblt功能的API函数,(Bitblt在VB本身的例程就有用于实现动画显示效果的例程),如果你比较这两个API函数的定义语句,会发现StretchBlt比Bitblt多出两个参数,即nSrcWidth和nSrcHeight(来源图象宽度和来源图像高度)。
例1:简单的显示一个图片
在BAS文件中定义
Option Explicit

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
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

在Form上放一个picture box,并事先定义好一个图片,增加一个按钮
Option Explicit

Private Sub Command1_Click()
    Dim w As Integer, h As Integer
   
    Me.ScaleMode = vbPixels
    w = Picture1.Width
    h = Picture1.Height
   
    StretchBlt Me.hdc, 0, 0, w, h, Picture1.hdc, 0, 0, w, h, vbSrcCopy
End Sub

例2:放大或缩小图片
放大:
Private Sub Command1_Click()
    Dim w As Integer, h As Integer
   
    Me.ScaleMode = vbPixels
    w = Picture1.Width
    h = Picture1.Height
   
    StretchBlt Me.hdc, 0, 0, w * 2, h * 2, Picture1.hdc, 0, 0, w, h, vbSrcCopy
End Sub
缩小:
Private Sub Command2_Click()
    Dim w As Integer, h As Integer
   
    Me.ScaleMode = vbPixels
    w = Picture1.Width
    h = Picture1.Height
   
    StretchBlt Me.hdc, 0, 0, w / 2, h / 2, Picture1.hdc, 0, 0, w, h, vbSrcCopy
End Sub
例3:翻转图片
左右翻转
Private Sub Command1_Click()
    Dim w As Integer, h As Integer
   
    Me.ScaleMode = vbPixels
    w = Picture1.Width
    h = Picture1.Height
   
    StretchBlt Me.hdc, w, 0, -w, h, Picture1.hdc, 0, 0, w, h, vbSrcCopy
End Sub
上下翻转
Private Sub Command2_Click()
    Dim w As Integer, h As Integer
   
    Me.ScaleMode = vbPixels
    w = Picture1.Width
    h = Picture1.Height
   
    StretchBlt Me.hdc, 0, 0, w / 2, h / 2, Picture1.hdc, 0, 0, w, h, vbSrcCopy
End Sub
左右并且上下翻转
Private Sub Command3_Click()
    Dim w As Integer, h As Integer
   
    Me.ScaleMode = vbPixels
    w = Picture1.Width
    h = Picture1.Height
   
    StretchBlt Me.hdc, w, h, -w, -h, Picture1.hdc, 0, 0, w, h, vbSrcCopy
End Sub

转自:h
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值