recherche

Maison  >  Questions et réponses  >  le corps du texte

objective-c - ios uiimageview的长宽放大3倍后 图片变模糊的问题

如题

 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;
}
黄舟黄舟2771 Il y a quelques jours620

répondre à tous(5)je répondrai

  • ringa_lee

    ringa_lee2017-04-18 09:06:49

    Ce n'est pas un problème de code, c'est un problème avec l'image elle-même. L'image est composée de milliers de pixels et la clarté de l'image est déterminée par sa propre résolution. Plus la résolution est élevée, plus l'affichage est clair. (La résolution de l'image est le nombre de pixels contenus dans une unité de pouce)
    Quant aux images au format png, si la résolution de l'image elle-même est de 640*960, il n'y a pas de problème si vous souhaitez l'afficher plus petite ou égale à la taille de l'image elle-même. Si vous souhaitez l'afficher plus grand, le flou est inévitable pour les images ayant la résolution de l'image elle-même. Le nombre total de pixels reste inchangé, mais la taille de l'image affichée devient plus grande, donc le nombre. Le nombre de pixels dans une unité devient plus petit et la résolution correspondante devient également plus petite, de sorte que l'image sera naturellement vague.
    Si vous souhaitez résoudre le problème actuel que vous rencontrez, laissez l'interface utilisateur produire des images haute résolution lors de la production d'images.
    J'espère que cela résout votre problème !

    répondre
    0
  • 阿神

    阿神2017-04-18 09:06:49

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

    L'image agrandie est naturellement floue. Vous pouvez également essayer iOS7, la nouvelle méthode de conversion.

    répondre
    0
  • 大家讲道理

    大家讲道理2017-04-18 09:06:49

    Lorsque vous dessinez, la résolution de l'écran doit être deux fois la taille. Essayez de multiplier la taille par 2

    répondre
    0
  • 迷茫

    迷茫2017-04-18 09:06:49

    Ce type d'agrandissement bitmap sera inévitablement flou.
    Seules les images vectorielles ne seront pas floues.

    Vous ne savez pas ce que vous voulez faire ? L'effet obtenu par votre code est de prendre une capture d'écran.
    Si vous souhaitez faire quelque chose comme retoucher une image, vous devez obtenir l'image originale, puis la dessiner sur une toile plus grande. Si vous utilisez une petite image, elle sera floue.

    répondre
    0
  • 高洛峰

    高洛峰2017-04-18 09:06:49

    Les gens en bas ont déjà dit la même chose. Je voudrais ajouter encore une chose : le rendu CG va considérablement épuiser le processeur.

    répondre
    0
  • Annulerrépondre