2011-09-20 2 views
0

고정 된 크기의 이미지를 만들고 싶습니다. 예 : 612 by 612. 이미지 픽커를 사용하여 내 아이폰에서 사진을 선택합니다. 따라서 모든 사진이 612x612 크기로 왜곡되지 않도록하려면 다음 방법을 사용하여 612x612 크기에 맞게 사진의 크기를 조정하십시오. 그러나 결과적으로 빈 칸 최종 이미지에서 생성 될 수 있습니다. 이미지가 때로는 전체 사각형이 같이 언급 한 바와 같이이미지 뷰 (이미지로 덮히지 않음)의 틈을 색으로 채우는 방법은 무엇입니까?

//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; 
} 

I ((612)에 의해 고정 된 크기 612) 내 이미지를 확장하려면 다음 코드를 사용하고

(아래 예 참조), 내가 얻을 아래 무엇을보고 같은 결과 :

enter image description here

어떻게 검은 색 이미지의 공백을 느낄 수 있습니까?

답변

2

한 가지 방법은 원하는 것을 얻을 수 있습니다에 배경 색상은 backgroundColor있는 UIImageViewblackColor로 설정하는 것입니다.

또 다른 방법은 이미지의 크기를 조절하면서 rect를 blackColor으로 채우는 것입니다. 의 blendMode : 알파 : 방법은 kCGBlendModeNormal로 설정되고이 blendMode drawInRect 에서 해당

- (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]; 
    ... 
} 

참고. 다른 블렌드 모드를 설정하면 원하지 않는 결과가 발생합니다. 예를 들어 블렌드 모드를 kCGBlendModePlusDarker으로 설정하고 검은 색 색으로 rect를 채우면 전체 이미지가 검은 색이됩니다.

+0

고마워요! 즉,이 선을 제거해야한다는 뜻입니까? [img drawInRect : newRect blendMode : kCGBlendModePlusDarker alpha : 1]; 'ModeNormal'하나로 바꾸시겠습니까? BTW이 위대한 작품! 고마워! – Zhen

+0

예. 실제 이미지를 그대로 유지하려면 * kCGBlendModeNormal *을 사용해야합니다. – EmptyStack

1

설정하여 검정 UIImageView 당신은 당신이

관련 문제