@
interface
UIImage
(
UIImageScale
)
-
(
UIImage*
)
getSubImage
:
(
CGRect
)
rect
;
-
(
UIImage*
)
scaleToSize
:
(
CGSize
)
size
;
@
end
@
implementation
UIImage
(
UIImageScale
)
//截取部分图像
-
(
UIImage*
)
getSubImage
:
(
CGRect
)
rect
{
CGImageRef
subImageRef
=
CGImageCreateWithImageInRect
(
self
.
CGImage
,
rect
)
;
CGRect
smallBounds
=
CGRectMake
(
0
,
0
,
CGImageGetWidth
(
subImageRef
)
,
CGImageGetHeight
(
subImageRef
)
)
;
UIGraphicsBeginImageContext
(
smallBounds
.
size
)
;
CGContextRef
context
=
UIGraphicsGetCurrentContext
(
)
;
CGContextDrawImage
(
context
,
smallBounds
,
subImageRef
)
;
UIImage*
smallImage
=
[
UIImage
imageWithCGImage
:
subImageRef
]
;
UIGraphicsEndImageContext
(
)
;
return
smallImage
;
}
//等比例缩放
-
(
UIImage*
)
scaleToSize
:
(
CGSize
)
size
{
CGFloat
width
=
CGImageGetWidth
(
self
.
CGImage
)
;
CGFloat
height
=
CGImageGetHeight
(
self
.
CGImage
)
;
float
verticalRadio
=
size
.
height*
1.0
/
height
;
float
horizontalRadio
=
size
.
width*
1.0
/
width
;
float
radio
=
1
;
if
(
verticalRadio
&
gt
;
1
&
amp
;
&
amp
;
horizontalRadio
&
gt
;
1
)
{
radio
=
verticalRadio
&
gt
;
horizontalRadio
?
horizontalRadio
:
verticalRadio
;
}
else
{
radio
=
verticalRadio
&
lt
;
horizontalRadio
?
verticalRadio
:
horizontalRadio
;
}
width
=
width*
radio
;
height
=
height*
radio
;
int
xPos
=
(
size
.
width
-
width
)
/
2
;
int
yPos
=
(
size
.
height
-
height
)
/
2
;
// 创建一个bitmap的context
// 并把它设置成为当前正在使用的context
UIGraphicsBeginImageContext
(
size
)
;
// 绘制改变大小的图片
[
self
drawInRect
:
CGRectMake
(
xPos
,
yPos
,
width
,
height
)
]
;
// 从当前context中创建一个改变大小后的图片
UIImage*
scaledImage
=
UIGraphicsGetImageFromCurrentImageContext
(
)
;
// 使当前的context出堆栈
UIGraphicsEndImageContext
(
)
;
// 返回新的改变大小后的图片
return
scaledImage
;
}
@
end
然后在下面方法里面调用就可以了!
-
(
BOOL
)
application
:
(
UIApplication *
)
application
didFinishLaunchingWithOptions
:
(
NSDictionary *
)
launchOptions
{
// Override point for customization after application launch.
UIImage *
image
=
[
[
UIImage
alloc
]
initWithData
:
[
NSData
dataWithContentsOfURL
:
[
NSURL
URLWithString
:
@
&
quot
;
http
:
//img21.mtime.cn/mg/2011/09/24/112524.53149978.jpg"]] ];
// 裁剪图片
//image = [image getSubImage:CGRectMake(10, 10, 70, 80)];
//等比列缩放
image
=
[
image
scaleToSize
:
CGSizeMake
(
200
,
300
)
]
;
UIImageView *
imageView
=
[
[
UIImageView
alloc
]
initWithImage
:
image
]
;
[
self
.
window
addSubview
:
imageView
]
;
NSLog
(
@
&
quot
;
image
.
size
:
%
@
&
quot
;
,
NSStringFromCGSize
(
CGSizeMake
(
imageView
.
image
.
size
.
width
,
imageView
.
image
.
size
.
height
)
)
)
;
//打印获取的网络图片的宽度和高度
[
self
.
window
makeKeyAndVisible
]
;
return
YES
;
}
//--------------截取部分图片到指定位置-------------------------
图片
(
UIImage*
)
img
要截取的起始坐标
sx
:
(
int
)
sx1
sy
:
(
int
)
sy1
要截取的长度和宽度
sw
:
(
int
)
sw1
sh
:
(
int
)
sh1
最终要显示的坐标
desx
:
(
int
)
desx1
desy
:
(
int
)
desy1
-
(
UIImage*
)
objectiveDrawRegion
:
(
UIImage*
)
img
sx
:
(
int
)
sx1
sy
:
(
int
)
sy1
sw
:
(
int
)
sw1
sh
:
(
int
)
sh1
desx
:
(
int
)
desx1
desy
:
(
int
)
desy1
{
[
self
saveImage
:
img
name
:
@
&
quot
;
objectiveDrawRegion1
.
png
&
quot
;
]
;
//创建图片缓冲
void
*
imageDataRegion
=
malloc
(
screenWidth*
screenHeight*
32
)
;
CGColorSpaceRef
iColorSpaceRegion
=
CGColorSpaceCreateDeviceRGB
(
)
;
CGContextRefiDeviceRegion
=
CGBitmapContextCreate
(
imageDataRegion
,
screenWidth
,
screenHeight
,
8
,
4
*
screenWidth
,
iColorSpaceRegion
,
kCGImageAlphaPremultipliedLast
)
;
//剪切区域
CGRect
clipRegion
=
CGRectMake
(
sx1
,
sy1
,
sw1
,
sh1
)
;
CGContextClipToRect
(
iDeviceRegion
,
clipRegion
)
;
CGFloat
widthf
=
img
.
size
.
width
;
CGFloat
heightf
=
img
.
size
.
height
;
CGRect
cg
=
CGRectMake
(
0.0
,
0.0
,
widthf
,
heightf
)
;
//画底图
CGContextDrawImage
(
iDeviceRegion
,
cg
,
img
.
CGImage
)
;
//将缓冲形成图片
CGImageRef
ioffRegion
=
CGBitmapContextCreateImage
(
iDeviceRegion
)
;
CGRect
cg1
=
CGRectMake
(
desx1
,
desy1
,
sw1
,
sh1
)
;
UIImage *
ui
=
[
UIImage
imageWithCGImage
:
ioffRegion
]
;
CGContextDrawImage
(当前
context
,
cg1
,
ui
.
CGImage
)
;
//清除缓冲
CGColorSpaceRelease
(
iColorSpaceRegion
)
;
CGContextRelease
(
iDeviceRegion
)
;
CGImageRelease
(
ioffRegion
)
;
free
(
imageDataRegion
)
;
// iDeviceRegion=NULL;
// imageDataRegion=0;
return
ui
;
}