使用 CoreData 保存图像后分辨率发生变化

Posted

技术标签:

【中文标题】使用 CoreData 保存图像后分辨率发生变化【英文标题】:Resolution changed after saving a image using CoreData 【发布时间】:2012-04-23 04:05:37 【问题描述】:

我在下面有以下代码。首先,在表格详细视图中,我捕获或加载图像(图像大小约为屏幕的 1/4),然后保存后图像将显示在 UITableView 中。到目前为止,一切似乎都很顺利。但是,当我按下 UITable 并尝试再次加载详细信息页面时。图像的分辨率降低。我猜它的大小与 TableView 中的大小相同。我可以知道我能做些什么来解决这个问题吗?

谢谢。

    -(void) ViewDidLoad
       if ([currentPicture smallPicture])
                [imageField setImage:[UIImage imageWithData:[currentPicture smallPicture]]];
    

- (IBAction)editSaveButtonPressed:(id)sender
            

            // If we are adding a new picture (because we didnt pass one from the table) then create an entry
                if (!currentPicture)
                    self.currentPicture = (Pictures *)[NSEntityDescription insertNewObjectForEntityForName:@"Pictures" inManagedObjectContext:self.managedObjectContext];

        if (imageField.image)
        // Resize and save a smaller version for the table
                    float resize = 74.0;
                    float actualWidth = imageField.image.size.width;
                    float actualHeight = imageField.image.size.height;
                    float divBy, newWidth, newHeight;
                    if (actualWidth > actualHeight) 
                        divBy = (actualWidth / resize);
                        newWidth = resize;
                        newHeight = (actualHeight / divBy);
                     else 
                        divBy = (actualHeight / resize);
                        newWidth = (actualWidth / divBy);
                        newHeight = resize;
                    
                    CGRect rect = CGRectMake(0.0, 0.0, newWidth, newHeight);
                    UIGraphicsBeginImageContext(rect.size);
                    [imageField.image drawInRect:rect];
                    UIImage *smallImage = UIGraphicsGetImageFromCurrentImageContext();
                    UIGraphicsEndImageContext();

                    // Save the small image version
                    NSData *smallImageData = UIImageJPEGRepresentation(smallImage, 1.0);
                    [self.currentPicture setSmallPicture:smallImageData];
                

【问题讨论】:

您是否尝试过在保存之前和加载之后记录图像的大小? 我想我没有。我从一些示例项目中获得了代码。我不知道该怎么做。谢谢 【参考方案1】:

[在此处输入链接描述][1]更改此行(NSData *smallImageData = UIImageJPEGRepresentation(smallImage, 1.0); ) 如下行..

NSData *smallImageData = UIImageJPEGRepresentation(smallImage, 0.0);

NSData *smallImageData = UIImagePNGRepresentation(smallImage);

希望对你有帮助..

【讨论】:

【参考方案2】:

(^.^)“您好,对不起,我的英语不好,如果有人喜欢纠正我的编辑,我将不胜感激”

您是否尝试过使用一个 UIImageView 和他的属性 contentMode? 像这样:

UIImageView *imagen = [[UIImageView alloc] initWithFrame:CGRectMake(X, Y, W, H)];
[imagen setContentMode:UIViewContentModeScaleAspectFit];

【讨论】:

以上是关于使用 CoreData 保存图像后分辨率发生变化的主要内容,如果未能解决你的问题,请参考以下文章

打开图像并使用相同的参数重新保存它,c#

在 swift 中捕获图像后,图像的方向在 ipad 中发生了变化

使用“SupressWhenMinimzed”安全关闭 RDP 会话后,远程计算机的屏幕分辨率发生变化

核心数据,NSManagedObject 在应用版本之间发生变化

应用更新后无处不在的商店位置发生意外变化

CoreData与CloudKit同步时将图像保存到CoreData?