2011-09-20 35 views
0

我想创建一个固定大小的图像,例如612由612.我正在使用图像选择器从我的iphone选择照片。因此,为了确保所有照片都适合612×612大小而不失真,我使用以下方法重新缩放照片以使它们符合612的大小612。但是,因此,空白区域可能会在最终图像中创建。 (见下例)如何用颜色填充imageview(未被图像覆盖)的空白?

我使用下面的代码(由612固定大小612),以扩大我的形象

//Scale the image to fit to imageview 
UIImage *image = [self scaleImage:img toRectSize:CGRectMake(0, 0, 612, 612)]; 


//Method to scale image 
- (UIImage *)scaleImage:(UIImage *)img toRectSize:(CGRect)screenRect 
{ 
    UIGraphicsBeginImageContext(screenRect.size); 
    float hfactor = img.size.width/screenRect.size.width; 
    float vfactor = img.size.height/screenRect.size.height; 

    float factor = MAX(hfactor, vfactor); 

    float newWidth = img.size.width/factor; 
    float newHeight = img.size.height/factor; 

    float leftOffset = (screenRect.size.width - newWidth)/2; 
    float topOffset = (screenRect.size.height - newHeight)/2; 

    CGRect newRect = CGRectMake(leftOffset, topOffset, newWidth, newHeight); 
    [img drawInRect:newRect blendMode:kCGBlendModePlusDarker alpha:1]; 

    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return newImage; 
} 

如前所述,作为图像有时是不完整的四边形,我得到一个导致像你看到下面的内容:

enter image description here

我怎么感觉了黑色图像中的空格?

回答

2

一种方式的背景色是设置的UIImageViewbackgroundColorblackColor

另一种方法是在缩放图像时填充矩形块blackColor

- (UIImage *)scaleImage:(UIImage *)img toRectSize:(CGRect)screenRect { 

    ... 
    CGRect newRect = CGRectMake(leftOffset, topOffset, newWidth, newHeight); 

    // Fill the original rect with black color 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetFillColorWithColor(context, [[UIColor blackColor] CGColor]); 
    CGContextFillRect(context, screenRect); 

    [img drawInRect:newRect blendMode:kCGBlendModeNormal alpha:1]; 
    ... 
} 

注意,在blendModedrawInRect:的BlendMode:阿尔法:方法设置为kCGBlendModeNormal。如果你设置了一些其他的混合模式,你会得到不希望的结果。例如,如果将混合模式设置为kCGBlendModePlusDarker并用blackColor填充矩形,则整个图像将变黑。

+0

谢谢!这是否意味着我必须删除此行[img drawInRect:newRect blendMode:kCGBlendModePlusDarker alpha:1];并用'ModeNormal'取代它?顺便说一句,这很好!非常感谢! – Zhen

+0

是的。如果你想让实际的图像不受干扰,你必须使用* kCGBlendModeNormal *。 – EmptyStack

1

设置你的UIImageView为黑色,你会得到你想要的