主题:[讨论]关于旋转截取图片的问题
Gleam
[专家分:3100] 发布于 2009-09-14 11:42:00
上次,我发帖请教了关于图片旋转的问题。Ilikefox老师给出了详细的解答。非常感谢。这次我还是请教一个相关的问题。
程序窗口中有张图片,我给他指定了中心位置,现在需要将这张图片以中心位置每5度角截取一张小图。我用图片旋转的方式,截取指定位置的方式已经实现了,但是时间太长了。有没有办法不用旋转图片,就可以截取小图。
我现在知道的屏幕截图方式是截取指定位置的矩形区域,没有办法以某个点位圆心来进行旋转截取。我想请教大家,有没有办法按圆心来旋转截取小图。
回复列表 (共3个回复)
沙发
Gleam [专家分:3100] 发布于 2009-09-21 17:57:00
怎么没有办法在不旋转图片的方式下截取图片么??希望高手们不吝指教。谢谢
板凳
Ilikefox [专家分:5770] 发布于 2009-09-29 12:06:00
哇,Glem这里还有一问。俺写一段代码,你自行改造一下:
功能:把选择的图片文件(.BMP或者.JPG)旋转30度,保存为新的图片文件(.BMP)
以下保存为prg运行。
cPicFile = GETPICT("bmp;jpg")
IF EMPTY(cPicFile)
RETURN
ENDIF
cPicFileSaveAs = ADDBS(JUSTPATH(cPicFile))+ "New" + ;
JUSTSTEM(cPicFile)+".bmp"
loImage = NEWOBJECT("GpImage", HOME() + "FFC/_gdiplus.vcx")
loImage.CreateFromFile(cPicFile)
loBitmap = NEWOBJECT("GpBitmap", HOME() + "FFC/_gdiplus.vcx")
loGraphics = NEWOBJECT('GpGraphics',HOME() + "FFC/_gdiplus.vcx")
loColor = NEWOBJECT('GpColor',HOME() + "FFC/_gdiplus.vcx")
loColor.Set(255,255,255,255)
loBrush =NEWOBJECT('gpSolidBrush',HOME() + "FFC/_gdiplus.vcx")
loBrush.Create(loColor)
lnWidth = loImage.ImageWidth
lnHeight = loImage.ImageHeight
lnPixelFormat = loImage.PixelFormat
lnNewRec=CEILING(SQRT(lnWidth*lnWidth+lnHeight*lnHeight))
loBitmap.Create(lnNewRec, lnNewRec, lnPixelFormat)
loGraphics.CreateFromImage(loBitmap)
loGraphics.FillRectangle(loBrush, 0,0,lnNewRec,lnNewRec)
X0=lnNewRec/2
Y0=lnNewRec/2
nAngle =30 && 转角30度
WITH loGraphics
.SmoothingMode=4
.TranslateTransform(X0,Y0,0) &&设置旋转中心
.RotateTransform(nAngle,0) &&按角度旋转
.TranslateTransform(0-X0,0-Y0,0) &&恢复
.DrawImageScaled(loImage,X0-lnWidth/2,Y0-lnHeight/2,lnWidth,lnHeight) &&画图,呵呵
.ResetTransform() &&恢复绘图矩阵
ENDWITH
loBitmap.SaveToFile(cPicFileSaveAs, "image/bmp")
3 楼
Gleam [专家分:3100] 发布于 2009-09-29 16:00:00
哦,刚才理解错了。以为和上次的效果是一样的呢。
我再读读。谢谢。
我来回复