2011-09-19 62 views
2
显示

您好,我目前正在开发的iOS 4.3,使用Objective C的 的应用程序,我需要处理,我已经从网上下载的图像的一部分的小的应用程序。 下面的代码显示了丢失的图像:为什么有些UIimages不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; 
} 

起初我认为这是由内存不足造成的,但我已经测试过,并且看起来并不是问题,这要归功于以前的版本

+1

不要名称以“获取”的方法,具有以下含义:有一个基准参数返回一个值。对于ARC来说,这些事情是强制性的。 – zaph

+1

啊谢谢,但是这只是一个复制粘贴的问题,在我的原代码,它返回一个指向ImageView的(当然有正确的返回值) – ofir

回答

0

我以前遇到过问题,图片没有出现在UIWebViews中,如果它们包含unicode字符在文件名中。我想知道这可能是一回事。尝试重命名您的图像?

+0

与下面的图片试了一下:HTTP://www.night-net .net/images/ms/microsoft_vista_home_basic.jpg它仍然没有工作,再加上从互联网的负载确实工作,问题是一些副本不显示,但谢谢:) – ofir

0

做这应该是可能的,低内存成本为我做了同样的测试,使用Flash创建的iPhone应用程序,做同样的事情,和它的作品。 但我更希望使用Objective C的这样的问题仍然有效