stretchblt函数怎么用

发布时间:2024-06-05 02:18:01 来源:君肯网

函数从源矩形中复制一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩。

x:逻辑单元x轴左上角坐标;

y:逻辑单元y轴左上角坐标;

nWidth: 设备矩形宽度;

nHeight:设备矩形高度;

pSrcDC: 源设备上下文;

xSrc :源矩形 x轴左上角坐标;

ySrc: 源矩形y 轴左上角坐标;

Specifies the x-coordinate (in logical units) of the upper-left corner of the source rectangle.

nSrcWidth:源矩形宽度;

nSrcHeight:源矩形高度

dwRop:指定要进行的光栅操作。

vc中StretchBlt怎么实现图片的旋转

调用StretchBlt之前,先调用SetSTretchBltMode(hdc, HALFTONE)

http://baike.baidu.com/view/1080401.htm

对放大和缩小都有效。

还有一点要注意,就是要用全色的图像。不然的话就算你调用了SetSTretchBltMode也不会有好效果。

MFC的StretchBlt显示图片为什么会这样?

StretchBlt实现不了,它只能实现绽放,要用GetPixel()和SetPixel()函数来做,基本法是,你创建一个图片的内存DC,按照你想要旋转的方式来重新写入各个像素的颜色,例如,你把图片的右下角的点的颜色写入到内存图片DC的左上角,再把最石下角左边的那个点写到左上角第二个位置,如此通过循环后,再把图片内存DC 显示出来,就能实现旋转。

不推荐你用GDI来做复杂的图片操作,用GDI+做起来要简单得多!

怎么用vb实现图形的旋转?

设置一下裁减模式。

在StrechBlt前加这一句。

::SetStretchBltMode(hdc,COLORONCOLOR)

这个是windows api函数,具体参数你可以百度。

启动vb6建立一个标准exe工程,首先添加两个图片框(picture1和picture2),添加三个命令按钮command1(caption=“正常显示”)、command2(caption=“180度倒立”)、command3(caption=“45度旋转”),双击窗体,写入以下代码:

PrivateConstSRCCOPY=&ampHCC0020

PrivateConstPi=3.14

PrivateDeclareFunctionSetPixelLib"gdi32"(ByValhdcAsLong, ByValxAsLong,ByValyAsLong,ByValcrColorAsLong)AsLong

PrivateDeclareFunctionGetPixelLib"gdi32"(ByValhdcAsLong, ByValxAsLong,ByValyAsLong)AsLong

PrivateDeclareFunctionStretchBltLib"gdi32"(ByValhdcAsLong, ByValxAsLong,ByValyAsLong,ByValnWidthAsLong,ByValnHeightAsLong, ByValhSrcDCAsLong,ByValxSrcAsLong,ByValySrcAsLong,ByValnSrcWidth AsLong,ByValnSrcHeightAsLong,ByValdwRopAsLong)AsLong

privateSubbmp_rotate(pic1AsPictureBox,pic2AsPictureBox,ByValtheta)‘45度旋转

Dimc1xAsInteger,c1yAsInteger

Dimc2xAsInteger,c2yAsInteger

DimaAsSingle

Dimp1xAsInteger,p1yAsInteger

Dimp2xAsInteger,p2yAsInteger

DimnAsInteger,rAsInteger

c1x=pic1.ScaleWidth2

c1y=pic1.ScaleHeight2

c2x=pic2.ScaleWidth2

c2y=pic2.ScaleHeight2

Ifc2x$#@60c2yThenn=c2yElsen=c2x

n=n-1

pic1hDC=pic1.hdc

pic2hDC=pic2.hdc

stretchblt函数怎么用

Forp2x=0Ton

Forp2y=0Ton

Ifp2x=0Thena=Pi/2Elsea=Atn(p2y/p2x)

r=Sqr(1&amp*p2x*p2x+1&amp*p2y*p2y)

p1x=r*Cos(a+theta)

p1y=r*Sin(a+theta)

c0&amp=GetPixel(pic1hDC,c1x+p1x,c1y+p1y)

c1&amp=GetPixel(pic1hDC,c1x-p1x,c1y-p1y)

c2&amp=GetPixel(pic1hDC,c1x+p1y,c1y-p1x)

c3&amp=GetPixel(pic1hDC,c1x-p1y,c1y+p1x)

Ifc0&amp$#@60$#@62-1ThenSetPixelpic2hDC,c2x+p2x,c2y+p2y,c0

Ifc1&amp$#@60$#@62-1ThenSetPixelpic2hDC,c2x-p2x,c2y-p2y,c1

Ifc2&amp$#@60$#@62-1ThenSetPi pic2hDC,c2x+p2y,c2y-p2x,c2

Ifc3&amp$#@60$#@62-1ThenSetPixelpic2hDC,c2x-p2y,c2y+p2x,c3

Next

Next

EndSub

PrivateSubCommand1_Click()‘正常复制

Picture2.Cls

px=Picture1.ScaleWidth

py=Picture1.ScaleHeight

StretchBltPicture2.hdc,px,0,-px,py,Picture1.hdc,0,0,px,py,SRCCOPY

EndSub

PrivateSubCommand2_Click()‘180度倒立

Picture2.Cls

px=Picture1.ScaleWidth

py=Picture1.ScaleHeight

StretchBltPicture2.hdc,0,py,px,-py,Picture1.hdc,0,0,px,py,SRCCOPY

EndSub

PrivateSubCommand3_Click()‘45旋转

Picture2.Cls

Callbmp_rotate(Picture1,Picture2,3.14/4)

EndSub

PrivateSubForm_Load()

OnErrorResumeNext

Me.Caption=App.Title"添加应用程序标题

Me.Left=(Screen.Width-Me.Width)/2

Me.Top=(Screen.Height-Me.Height)/2"窗体具中

Picture1.ScaleMode=3

Picture2.ScaleMode=3

EndSub

以上就是关于stretchblt函数怎么用全部的内容,如果了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

更多相关资讯

函数从源矩形中复制一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩。 x:逻辑单元x轴左上角坐标; y:逻辑单元y轴左上角…
查看详情
函数从源矩形中复制一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩。 x:逻辑单元x轴左上角坐标; y:逻辑单元y轴左上角…
查看详情
函数从源矩形中复制一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩。 x:逻辑单元x轴左上角坐标; y:逻辑单元y轴左上角…
查看详情
相关文章
推荐游戏
风之谷
风之谷
游戏资讯 10.5M
下载
斗罗大陆3
斗罗大陆3
游戏资讯 566.9M
下载
冠军网球
冠军网球
游戏资讯 148.1M
下载
最佳炮手
最佳炮手
游戏资讯 68.1M
下载
如梦下弦月
如梦下弦月
游戏资讯 840.1M
下载
富甲封神传
富甲封神传
游戏资讯 263.0M
下载