2011-09-19 5 views
2

안녕하세요. 현재 iOS 4.3에 작은 앱을 개발 중입니다. 목표는 웹에서 다운로드 한 이미지를 조작해야하는 앱의 일부로 입니다.일부 UIimage가 iphone에 표시되지 않는 이유

(원래는 클래스에 있지만 그것을 쉽게 붙여 넣을 복사 할 수 있도록 난 그냥 테스트 시나리오로 이것을 함께 넣어)

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self loadImage:@"http://www.night-net.net/images/ms/microsoft_vista_home_basic.jpg"]; 
    [self getCroped:CGRectMake(10, 50, 80, 160)]; 
    [self getCroped:CGRectMake(90, 50, 80, 80)]; 
    [self getCroped:CGRectMake(90, 130, 40, 80)]; 
    [self getCroped:CGRectMake(130, 130, 40, 40)]; 
    [self getCroped:CGRectMake(130, 170, 40, 40)]; 

} 
-(void) loadImage : (NSString*) url 
{ 
    _data = [NSData dataWithContentsOfURL: 
       [NSURL URLWithString: url]]; 
} 
-(UIImageView*) getCroped:(CGRect) imageSize{ 
    UIImage *temp = [[UIImage alloc] initWithData:_data]; 
    UIImage *myImage = [self resizedImage:temp and:CGSizeMake(160,160) interpolationQuality:kCGInterpolationHigh]; 
    UIImage *image = [self croppedImage:myImage and:imageSize]; 
    UIImageView *imageView = [[UIImageView alloc] init]; 
    imageView.image = image; 
    imageView.frame = imageSize; 
    [[self view] addSubview:imageView]; 

    return imageView; 
} 
- (UIImage *)croppedImage:(UIImage*) image and: (CGRect)bounds { 
    CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], bounds); 
    UIImage *croppedImage = [UIImage imageWithCGImage:imageRef]; 
    CGImageRelease(imageRef); 
    return croppedImage; 
} 


- (UIImage *)resizedImage:(UIImage*) image and:(CGSize)newSize interpolationQuality:(CGInterpolationQuality)quality { 
    BOOL drawTransposed = NO; 


    return [self resizedImage:image 
          and:newSize 
        transform:[self transformForOrientation:newSize] 
       drawTransposed:drawTransposed 
     interpolationQuality:quality]; 
} 


// Returns a copy of the image that has been transformed using the given affine transform and scaled to the new size 
// The new image's orientation will be UIImageOrientationUp, regardless of the current image's orientation 
// If the new size is not integral, it will be rounded up 
- (UIImage *)resizedImage:(UIImage*) image and:(CGSize)newSize 
       transform:(CGAffineTransform)transform 
      drawTransposed:(BOOL)transpose 
    interpolationQuality:(CGInterpolationQuality)quality { 
    CGRect newRect = CGRectIntegral(CGRectMake(0, 0, newSize.width, newSize.height)); 
    CGRect transposedRect = CGRectMake(0, 0, newRect.size.height, newRect.size.width); 
    CGImageRef imageRef = image.CGImage; 

    // Build a context that's the same dimensions as the new size 
    CGContextRef bitmap = CGBitmapContextCreate(NULL, 
               newRect.size.width, 
               newRect.size.height, 
               CGImageGetBitsPerComponent(imageRef), 
               0, 
               CGImageGetColorSpace(imageRef), 
               CGImageGetBitmapInfo(imageRef)); 

    // Rotate and/or flip the image if required by its orientation 
    CGContextConcatCTM(bitmap, transform); 

    // Set the quality level to use when rescaling 
    CGContextSetInterpolationQuality(bitmap, quality); 

    // Draw into the context; this scales the image 
    CGContextDrawImage(bitmap, transpose ? transposedRect : newRect, imageRef); 

    // Get the resized image from the context and a UIImage 
    CGImageRef newImageRef = CGBitmapContextCreateImage(bitmap); 
    UIImage *newImage = [UIImage imageWithCGImage:newImageRef]; 

    // Clean up 
    CGContextRelease(bitmap); 
    CGImageRelease(newImageRef); 

    return newImage; 
} 



// Returns an affine transform that takes into account the image orientation when drawing a scaled image 
- (CGAffineTransform)transformForOrientation:(CGSize)newSize { 
    CGAffineTransform transform = CGAffineTransformIdentity; 
    transform = CGAffineTransformTranslate(transform, newSize.width, 0); 
    transform = CGAffineTransformScale(transform, -1, 1); 
    return transform; 
} 

첫번째 I에서 : 다음과 같은 코드가 누락 된 이미지를 보여줍니다 메모리 부족으로 인한 것이라고 생각했지만 테스트를 거쳤습니다. 사전에 감사드립니다.

+1

"get"로 시작하는 메서드 이름을 지정하지 마십시오.이 메서드는 참조 매개 변수에 의해 반환되는 값을 의미합니다. 이러한 일들을 계속하는 것은 ARC를 위해 필수적입니다. – zaph

+1

ahh 고마워,하지만 그건 그냥 복사 붙여 넣기 문제, 내 원래 코드에서 imageView 포인터를 반환합니다 (물론 적절한 반환 값이 있습니다) – ofir

답변

0

이미지가 포함 된 경우 UIWebViews에 이미지가 표시되지 않는 문제가있었습니다. 파일 이름에 유니 코드 문자. 이것이 똑같은 것인지 궁금합니다. 이미지의 이름을 바꾸시겠습니까?

+0

다음 이미지로 시도 : http : //www.night-net .net/images/ms/microsoft_vista_home_basic.jpg 그리고 여전히 작동하지 않았고, 인터넷에서로드가 작동하지 않습니다. 문제는 일부 복사본이 표시되지 않지만 감사합니다. – ofir

0

동일한 작업을 수행하는 iphone 앱을 만들기 위해 플래시를 사용하여 동일한 테스트를 수행 했으므로 메모리 비용이 낮고 가능해야합니다. 하지만 객관적인 C를 사용하는 것이 훨씬 더 좋을 것입니다. 질문은 여전히 ​​나타납니다.

관련 문제