优秀的手机游戏下载!
首页 stretchblt函数怎么用

stretchblt函数怎么用

发布时间:2024-06-05 02:18:01 编辑:打包星星 浏览:617

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

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.ScaleWidth\2

c1y=pic1.ScaleHeight\2

c2x=pic2.ScaleWidth\2

c2y=pic2.ScaleHeight\2

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轴左上角坐标; nWidth:…
查看详情
函数从源矩形中复制一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩。x:逻辑单元x轴左上角坐标; y:逻辑单元y轴左上角坐标; nWidth:…
查看详情
函数从源矩形中复制一个位图到目标矩形,必要时按目标设备设置的模式进行图像的拉伸或压缩。x:逻辑单元x轴左上角坐标; y:逻辑单元y轴左上角坐标; nWidth:…
查看详情
相关资讯
猜你喜欢