ios - 为什么 UIImage 在 Slider 中裁剪后变得模糊?

标签 ios objective-c uiimage cgimage cgimageref

当我拖动 slider 时,我正在为我的 slider 使用此代码来为 UISlider 裁剪图像,然后图像模糊,如何在不模糊和不清晰的情况下丢失

- (UIImage *) revealedTrackImageForCurrentValues {
    //Get left and right x positions
    float lowerHandleWidth = _lowerHandleHidden ? 2.0f : _lowerHandle.frame.size.width;
    float upperHandleWidth = _upperHandleHidden ? 2.0f : _upperHandle.frame.size.width;
    float xLowerValue = ((self.bounds.size.width - lowerHandleWidth) * (_lowerValue - _minimumValue) / (_maximumValue - _minimumValue))+(lowerHandleWidth/2.0f);
    float xUpperValue = ((self.bounds.size.width - upperHandleWidth) * (_upperValue - _minimumValue) / (_maximumValue - _minimumValue))+(upperHandleWidth/2.0f);

    //Crop the image
    CGRect croppedImageRect = CGRectMake(xLowerValue, 0.0f, xUpperValue - xLowerValue, self.trackImage.size.height);
    CGImageRef croppedImageRef = CGImageCreateWithImageInRect([self.trackImage CGImage], croppedImageRect);
    UIImage *croppedImage = [UIImage imageWithCGImage:croppedImageRef];
    CGImageRelease(croppedImageRef);

    return croppedImage;

我怎样才能在不损失图像清晰度的情况下做到这一点??

最佳答案

编辑代码:

你必须继承 UIImage:

UIImageView+裁剪.h

#import <UIKit/UIKit.h>

@interface UIImage (Cropping)
- (UIImage *)revealedTrackImageForRect:(CGRect)croppedImageRect;
@end

UIImageView+裁剪.m

#import "UIImage+Cropping.h"

@implementation UIImage (Cropping)


- (UIImage *)revealedTrackImageForRect:(CGRect)croppedImageRect
{
    //create drawing context
    UIGraphicsBeginImageContextWithOptions(croppedImageRect.size, NO, 0.0f);

    //draw
    [self drawAtPoint:CGPointMake(-croppedImageRect.origin.x, -croppedImageRect.origin.y)];

    //capture resultant image
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    //return image
    return image;
}

@end

然后调用你的代码:

#import "UIImage+Cropping.h"

- (UIImage *)revealedTrackImageForCurrentValues 
{
    //Get left and right x positions
    float lowerHandleWidth = _lowerHandleHidden ? 2.0f : _lowerHandle.frame.size.width;
    float upperHandleWidth = _upperHandleHidden ? 2.0f : _upperHandle.frame.size.width;
    float xLowerValue = ((self.bounds.size.width - lowerHandleWidth) * (_lowerValue - _minimumValue) / (_maximumValue - _minimumValue))+(lowerHandleWidth/2.0f);
    float xUpperValue = ((self.bounds.size.width - upperHandleWidth) * (_upperValue - _minimumValue) / (_maximumValue - _minimumValue))+(upperHandleWidth/2.0f);

    // Get rect
    CGRect croppedImageRect = CGRectMake(xLowerValue, 0.0f, xUpperValue - xLowerValue, self.trackImage.size.height);

    //Get cropped image
    UIImage *croppedImage = [self.trackImage revealedTrackImageForRect: croppedImageRect];

    return croppedImage;
}

关于ios - 为什么 UIImage 在 Slider 中裁剪后变得模糊?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25762208/

相关文章:

objective-c - self.tableView reloadData 不重新加载 UITableView

ios - 如何在 iOS 上捕获的视频中添加水印 - Swift 编程

ios - 如何通过 Storyboard(xib?)和以编程方式 Xamarin.iOS 制作弹出窗口

ios - 如何在 iOS 9 中使用 Apple maps on objective-c?

iphone - 在运行时删除 UIImageView 中的图像背景

ios - 如何通过 Storyboard设置 UISegmentedControl 背景图像?

swift - 如何通过动画 UIView 将 UIImage 设置到 SWIFT 中的另一个 View Controller

php - 从 iOS 填写 PHP 表单

iphone - twitter 上的 SimulTweet 实现?

ios - 需要澄清 iPhone 内存管理