H5W3
当前位置:H5W3 > 其他技术问题 > 正文

求解释一段代码,ios开发的

- (void)setThumbnailDataFromImage:(UIImage *)image
{
    CGSize origImageSize = [image size];

    // The rectangle of the thumbnail
    CGRect newRect = CGRectMake(0, 0, 40, 40);

    // Figure out a scaling ratio to make sure we maintain the same aspect ratio
    // --------------------
    // [START] 这里看不懂 1
    float ratio = MAX(newRect.size.width / origImageSize.width, 
                      newRect.size.height / origImageSize.height);
    // [END] 这里看不懂 1
    // --------------------

    // Create a transparent bitmap context with a scaling factor 
    // equal to that of the screen
    UIGraphicsBeginImageContextWithOptions(newRect.size, NO, 0.0);

    // Create a path that is a rounded rectangle
    UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:newRect
                                                    cornerRadius:5.0];
    // Make all subsequent drawing clip to this rounded rectangle
    [path addClip];

    // Center the image in the thumbnail rectangle
    // --------------------
    // [START] 这里看不懂 2
    CGRect projectRect;
    projectRect.size.width = ratio * origImageSize.width;
    projectRect.size.height = ratio * origImageSize.height;
    projectRect.origin.x = (newRect.size.width - projectRect.size.width) / 2.0;
    projectRect.origin.y = (newRect.size.height - projectRect.size.height) / 2.0;
    // [END] 这里看不懂 2
    // --------------------

    // Draw the image on it
    [image drawInRect:projectRect];

    // Get the image from the image context, keep it as our thumbnail
    UIImage *smallImage = UIGraphicsGetImageFromCurrentImageContext();
    [self setThumbnail:smallImage];

    // Get the PNG representation of the image and set it as our archivable data
    NSData *data = UIImagePNGRepresentation(smallImage);
    [self setThumbnailData:data];

    // Cleanup image context resources, we're done
    UIGraphicsEndImageContext();
}

关于那两段代码,

  1. 第一段那个比例为什么要取大的?
  2. 第二段代码是计算图片的居中显示位置,为什么要这么计算,为什么这么计算就居中了?

看了半会没看懂,求大神解释

回答:

他这个算法就是图像的内容保持原有比例并且居中,但是有一点问题,就是如果图像比40×40小的话没做处理。

mac笔记本,手指拖一下,画的不好,见谅
首先你获取图片缩放的比例,取max,就是以短边为准(图像大于40×40的话)。
然后你的内容要居中,那么就用2的算法算点你可以依照下图自己想一下,应该就能理解了。
图片描述
Quartz 2D Drawing

本文地址:H5W3 » 求解释一段代码,ios开发的

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址