回 帖 发 新 帖 刷新版面

主题:[讨论]关于旋转截取图片的问题

上次,我发帖请教了关于图片旋转的问题。Ilikefox老师给出了详细的解答。非常感谢。这次我还是请教一个相关的问题。
程序窗口中有张图片,我给他指定了中心位置,现在需要将这张图片以中心位置每5度角截取一张小图。我用图片旋转的方式,截取指定位置的方式已经实现了,但是时间太长了。有没有办法不用旋转图片,就可以截取小图。
我现在知道的屏幕截图方式是截取指定位置的矩形区域,没有办法以某个点位圆心来进行旋转截取。我想请教大家,有没有办法按圆心来旋转截取小图。

回复列表 (共3个回复)

沙发

怎么没有办法在不旋转图片的方式下截取图片么??希望高手们不吝指教。谢谢

板凳

哇,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 楼

哦,刚才理解错了。以为和上次的效果是一样的呢。
我再读读。谢谢。

我来回复

您尚未登录,请登录后再回复。点此登录或注册