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

如题

 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であれば、それ以下で表示したい場合は問題ありません画像自体の解像度を大きくすると、画像自体の総画素数は変わりませんが、表示される画像のサイズが大きくなるため、数値が大きくなります。 1単位内の画素数が小さくなり、対応する解像度も小さくなりますので、当然ぼやけた絵になります。
現在発生している問題を解決したい場合は、画像の生成時に UI で高解像度の画像を生成させます。
これで問題が解決されることを願っています!

いいねを押す +0
阿神

リーリー

写真を拡大すると自然にぼやけてしまいます。新しい変換方法である iOS7 を試すこともできます。

いいねを押す +0
大家讲道理

描画するときは、画面解像度を 2 倍にしてください。

いいねを押す +0
迷茫

この種のビットマップ拡大では、必然的にぼやけてしまいます。
ベクター画像のみがぼやけません。

何をしたいのか分かりませんか?コードによって達成される効果は、スクリーンショットを撮ることです。
画像編集のようなことをしたい場合は、元の画像を取得してから、大きなキャンバスに描画する必要があります。小さい画像を使用すると、ぼやけてしまいます。

いいねを押す +0
小葫芦

階下の人も同じことを言っていましたが、もう 1 つ付け加えておきたいのは、CG レンダリングは CPU を非常に消耗します。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート