objective-c - ios uiimageview的长宽放大3倍后 图片变模糊的问题
黄舟
黄舟 2017-04-18 09:04:49
0
5
622

如题

 UIImageView *shareImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, IMG_WIDTH*Big_Time, IMG_HEIGHT*Big_Time)];

Big_Time是3 里面的图片的宽和高我也同比放大了3倍 但是就是有一些模糊 这是为什么

这是放大图片的函数

- (UIImage *)clipImageWithScaleWithsize:(CGSize)asize
{
    UIImage *newimage;
    UIImage *image = self;
    if (nil == image) {
        newimage = nil;
    }
    else{
        CGSize oldsize = image.size;
        CGRect rect;
        if (asize.width/asize.height > oldsize.width/oldsize.height) {
            rect.size.width = asize.width;
            rect.size.height = asize.width*oldsize.height/oldsize.width;
            rect.origin.x = 0;
            rect.origin.y = (asize.height - rect.size.height)/2;
        }
        else{
            rect.size.width = asize.height*oldsize.width/oldsize.height;
            rect.size.height = asize.height;
            rect.origin.x = (asize.width - rect.size.width)/2;
            rect.origin.y = 0;
        }
        UIGraphicsBeginImageContext(asize);
        CGContextRef context = UIGraphicsGetCurrentContext();
        CGContextClipToRect(context, CGRectMake(0, 0, asize.width, asize.height));
        CGContextSetFillColorWithColor(context, [[UIColor clearColor] CGColor]);
        UIRectFill(CGRectMake(0, 0, asize.width, asize.height));//clear background
        [image drawInRect:rect];
        newimage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
    }
    return newimage;
}

这是将UIimageview转化成图片

+(UIImage *)imageWithView:(UIView *)view
{
    UIGraphicsBeginImageContext(view.bounds.size);
    CGContextRef currnetContext = UIGraphicsGetCurrentContext();
    [view.layer renderInContext:currnetContext];
    // 从当前context中创建一个改变大小后的图片
    UIImage* image = UIGraphicsGetImageFromCurrentImageContext();
    // 使当前的context出堆栈
    UIGraphicsEndImageContext();
    return image;
}
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回覆(5)
左手右手慢动作

不是程式碼問題,是圖片本身問題,影像由成千上萬像素點構成的,而影像的清晰程度由自身的解析度決定,解析度越高,顯示越清晰。 (影像解析度是單位英吋包含的像素點數)
就png格式的圖片來說吧,如果圖片本身解析度是640*960,如果要顯示小於或等於圖片自身大小沒什麼問題,如果要顯示大於圖片自身解析度的影像,模糊是必然的,像素點總數不變,但是顯示圖片的尺寸變大了,那麼一個單位內的像素點變少了,對應的解析度也變小了,圖片自然會模糊。
如果想解決目前遇到的問題,就讓UI出圖的時候出高解析度的影像。
希望能解決你的問題!

阿神
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, 0);
    [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES];
    UIImage *copied = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

放大了圖片自然模糊。也可以試試iOS7,新的轉換方式吧。

大家讲道理

繪圖的時候是尺寸, 螢幕的解析度應該是其兩倍, asize乘以2試試

迷茫

這種點陣圖放大,必然會模糊。
只有向量圖不會模糊。

不知道你想做什麼?你的程式碼達到的效果就是截圖。
如果你想做圖片編輯一類的事兒,那麼你需要拿到圖片的原圖,再在更大的畫布里做繪製,用小圖片就是會模糊的。

小葫芦

樓下幾位都說得差不多了,我補充一點:CG渲染會很燒CPU的。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板