From 3e8437ae559487362fae3525beb79c534c213a51 Mon Sep 17 00:00:00 2001
From: 单军华
Date: Thu, 12 Jul 2018 13:44:34 +0800
Subject: [PATCH] bug修复和功能优化
---
screendisplay/Pods/M13ProgressSuite/Classes/HUD/UIImage+ImageEffects.m | 278 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 278 insertions(+), 0 deletions(-)
diff --git a/screendisplay/Pods/M13ProgressSuite/Classes/HUD/UIImage+ImageEffects.m b/screendisplay/Pods/M13ProgressSuite/Classes/HUD/UIImage+ImageEffects.m
new file mode 100755
index 0000000..a11070d
--- /dev/null
+++ b/screendisplay/Pods/M13ProgressSuite/Classes/HUD/UIImage+ImageEffects.m
@@ -0,0 +1,278 @@
+/*
+ File: UIImage+ImageEffects.m
+ Abstract: This is a category of UIImage that adds methods to apply blur and tint effects to an image. This is the code you���ll want to look out to find out how to use vImage to efficiently calculate a blur.
+ Version: 1.0
+
+ Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple
+ Inc. ("Apple") in consideration of your agreement to the following
+ terms, and your use, installation, modification or redistribution of
+ this Apple software constitutes acceptance of these terms. If you do
+ not agree with these terms, please do not use, install, modify or
+ redistribute this Apple software.
+
+ In consideration of your agreement to abide by the following terms, and
+ subject to these terms, Apple grants you a personal, non-exclusive
+ license, under Apple's copyrights in this original Apple software (the
+ "Apple Software"), to use, reproduce, modify and redistribute the Apple
+ Software, with or without modifications, in source and/or binary forms;
+ provided that if you redistribute the Apple Software in its entirety and
+ without modifications, you must retain this notice and the following
+ text and disclaimers in all such redistributions of the Apple Software.
+ Neither the name, trademarks, service marks or logos of Apple Inc. may
+ be used to endorse or promote products derived from the Apple Software
+ without specific prior written permission from Apple. Except as
+ expressly stated in this notice, no other rights or licenses, express or
+ implied, are granted by Apple herein, including but not limited to any
+ patent rights that may be infringed by your derivative works or by other
+ works in which the Apple Software may be incorporated.
+
+ The Apple Software is provided by Apple on an "AS IS" basis. APPLE
+ MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
+ THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
+ FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
+ OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+ IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
+ MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
+ AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
+ STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+ Copyright (C) 2013 Apple Inc. All Rights Reserved.
+
+
+ Copyright �� 2013 Apple Inc. All rights reserved.
+ WWDC 2013 License
+
+ NOTE: This Apple Software was supplied by Apple as part of a WWDC 2013
+ Session. Please refer to the applicable WWDC 2013 Session for further
+ information.
+
+ IMPORTANT: This Apple software is supplied to you by Apple Inc.
+ ("Apple") in consideration of your agreement to the following terms, and
+ your use, installation, modification or redistribution of this Apple
+ software constitutes acceptance of these terms. If you do not agree with
+ these terms, please do not use, install, modify or redistribute this
+ Apple software.
+
+ In consideration of your agreement to abide by the following terms, and
+ subject to these terms, Apple grants you a non-exclusive license, under
+ Apple's copyrights in this original Apple software (the "Apple
+ Software"), to use, reproduce, modify and redistribute the Apple
+ Software, with or without modifications, in source and/or binary forms;
+ provided that if you redistribute the Apple Software in its entirety and
+ without modifications, you must retain this notice and the following
+ text and disclaimers in all such redistributions of the Apple Software.
+ Neither the name, trademarks, service marks or logos of Apple Inc. may
+ be used to endorse or promote products derived from the Apple Software
+ without specific prior written permission from Apple. Except as
+ expressly stated in this notice, no other rights or licenses, express or
+ implied, are granted by Apple herein, including but not limited to any
+ patent rights that may be infringed by your derivative works or by other
+ works in which the Apple Software may be incorporated.
+
+ The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES
+ NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE
+ IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
+ OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
+
+ IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
+ OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
+ MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
+ AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
+ STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+ EA1002
+ 5/3/2013
+ */
+
+#import "UIImage+ImageEffects.h"
+
+@import Accelerate;
+#import <float.h>
+
+
+@implementation UIImage (ImageEffects)
+
+
+- (UIImage *)applyLightEffect
+{
+ UIColor *tintColor = [UIColor colorWithWhite:1.0 alpha:0.5];
+ return [self applyBlurWithRadius:30 tintColor:tintColor saturationDeltaFactor:1.8 maskImage:nil];
+}
+
+
+- (UIImage *)applyExtraLightEffect
+{
+ UIColor *tintColor = [UIColor colorWithWhite:0.97 alpha:0.82];
+ return [self applyBlurWithRadius:20 tintColor:tintColor saturationDeltaFactor:1.8 maskImage:nil];
+}
+
+
+- (UIImage *)applyDarkEffect
+{
+ UIColor *tintColor = [UIColor colorWithWhite:0.11 alpha:0.73];
+ return [self applyBlurWithRadius:20 tintColor:tintColor saturationDeltaFactor:1.8 maskImage:nil];
+}
+
+
+- (UIImage *)applyTintEffectWithColor:(UIColor *)tintColor
+{
+ const CGFloat EffectColorAlpha = 0.6;
+ UIColor *effectColor = tintColor;
+ NSInteger componentCount = CGColorGetNumberOfComponents(tintColor.CGColor);
+ if (componentCount == 2) {
+ CGFloat b;
+ if ([tintColor getWhite:&b alpha:NULL]) {
+ effectColor = [UIColor colorWithWhite:b alpha:EffectColorAlpha];
+ }
+ }
+ else {
+ CGFloat r, g, b;
+ if ([tintColor getRed:&r green:&g blue:&b alpha:NULL]) {
+ effectColor = [UIColor colorWithRed:r green:g blue:b alpha:EffectColorAlpha];
+ }
+ }
+ return [self applyBlurWithRadius:10 tintColor:effectColor saturationDeltaFactor:-1.0 maskImage:nil];
+}
+
+
+- (UIImage *)applyBlurWithRadius:(CGFloat)blurRadius tintColor:(UIColor *)tintColor saturationDeltaFactor:(CGFloat)saturationDeltaFactor maskImage:(UIImage *)maskImage
+{
+ // Check pre-conditions.
+ if (self.size.width < 1 || self.size.height < 1) {
+ NSLog (@"*** error: invalid size: (%.2f x %.2f). Both dimensions must be >= 1: %@", self.size.width, self.size.height, self);
+ return nil;
+ }
+ if (!self.CGImage) {
+ NSLog (@"*** error: image must be backed by a CGImage: %@", self);
+ return nil;
+ }
+ if (maskImage && !maskImage.CGImage) {
+ NSLog (@"*** error: maskImage must be backed by a CGImage: %@", maskImage);
+ return nil;
+ }
+
+ CGRect imageRect = { CGPointZero, self.size };
+ UIImage *effectImage = self;
+
+ BOOL hasBlur = blurRadius > __FLT_EPSILON__;
+ BOOL hasSaturationChange = fabs(saturationDeltaFactor - 1.) > __FLT_EPSILON__;
+ if (hasBlur || hasSaturationChange) {
+ UIGraphicsBeginImageContextWithOptions(self.size, NO, [UIScreen mainScreen].scale);
+ CGContextRef effectInContext = UIGraphicsGetCurrentContext();
+ CGContextScaleCTM(effectInContext, 1.0, -1.0);
+ CGContextTranslateCTM(effectInContext, 0, -self.size.height);
+ CGContextDrawImage(effectInContext, imageRect, self.CGImage);
+
+ vImage_Buffer effectInBuffer;
+ effectInBuffer.data = CGBitmapContextGetData(effectInContext);
+ effectInBuffer.width = CGBitmapContextGetWidth(effectInContext);
+ effectInBuffer.height = CGBitmapContextGetHeight(effectInContext);
+ effectInBuffer.rowBytes = CGBitmapContextGetBytesPerRow(effectInContext);
+
+ UIGraphicsBeginImageContextWithOptions(self.size, NO, [UIScreen mainScreen].scale);
+ CGContextRef effectOutContext = UIGraphicsGetCurrentContext();
+ vImage_Buffer effectOutBuffer;
+ effectOutBuffer.data = CGBitmapContextGetData(effectOutContext);
+ effectOutBuffer.width = CGBitmapContextGetWidth(effectOutContext);
+ effectOutBuffer.height = CGBitmapContextGetHeight(effectOutContext);
+ effectOutBuffer.rowBytes = CGBitmapContextGetBytesPerRow(effectOutContext);
+
+ if (hasBlur) {
+ // A description of how to compute the box kernel width from the Gaussian
+ // radius (aka standard deviation) appears in the SVG spec:
+ // http://www.w3.org/TR/SVG/filters.html#feGaussianBlurElement
+ //
+ // For larger values of 's' (s >= 2.0), an approximation can be used: Three
+ // successive box-blurs build a piece-wise quadratic convolution kernel, which
+ // approximates the Gaussian kernel to within roughly 3%.
+ //
+ // let d = floor(s * 3*sqrt(2*pi)/4 + 0.5)
+ //
+ // ... if d is odd, use three box-blurs of size 'd', centered on the output pixel.
+ //
+ CGFloat inputRadius = blurRadius * [[UIScreen mainScreen] scale];
+ unsigned int radius = (int)floor(inputRadius * 3. * sqrt(2 * M_PI) / 4 + 0.5);
+ if (radius % 2 != 1) {
+ radius += 1; // force radius to be odd so that the three box-blur methodology works.
+ }
+ vImageBoxConvolve_ARGB8888(&effectInBuffer, &effectOutBuffer, NULL, 0, 0, radius, radius, 0, kvImageEdgeExtend);
+ vImageBoxConvolve_ARGB8888(&effectOutBuffer, &effectInBuffer, NULL, 0, 0, radius, radius, 0, kvImageEdgeExtend);
+ vImageBoxConvolve_ARGB8888(&effectInBuffer, &effectOutBuffer, NULL, 0, 0, radius, radius, 0, kvImageEdgeExtend);
+ }
+ BOOL effectImageBuffersAreSwapped = NO;
+ if (hasSaturationChange) {
+ CGFloat s = saturationDeltaFactor;
+ CGFloat floatingPointSaturationMatrix[] = {
+ 0.0722 + 0.9278 * s, 0.0722 - 0.0722 * s, 0.0722 - 0.0722 * s, 0,
+ 0.7152 - 0.7152 * s, 0.7152 + 0.2848 * s, 0.7152 - 0.7152 * s, 0,
+ 0.2126 - 0.2126 * s, 0.2126 - 0.2126 * s, 0.2126 + 0.7873 * s, 0,
+ 0, 0, 0, 1,
+ };
+ const int32_t divisor = 256;
+ NSUInteger matrixSize = sizeof(floatingPointSaturationMatrix)/sizeof(floatingPointSaturationMatrix[0]);
+ int16_t saturationMatrix[matrixSize];
+ for (NSUInteger i = 0; i < matrixSize; ++i) {
+ saturationMatrix[i] = (int16_t)roundf((float)floatingPointSaturationMatrix[i] * divisor);
+ }
+ if (hasBlur) {
+ vImageMatrixMultiply_ARGB8888(&effectOutBuffer, &effectInBuffer, saturationMatrix, divisor, NULL, NULL, kvImageNoFlags);
+ effectImageBuffersAreSwapped = YES;
+ }
+ else {
+ vImageMatrixMultiply_ARGB8888(&effectInBuffer, &effectOutBuffer, saturationMatrix, divisor, NULL, NULL, kvImageNoFlags);
+ }
+ }
+ if (!effectImageBuffersAreSwapped)
+ effectImage = UIGraphicsGetImageFromCurrentImageContext();
+ UIGraphicsEndImageContext();
+
+ if (effectImageBuffersAreSwapped)
+ effectImage = UIGraphicsGetImageFromCurrentImageContext();
+ UIGraphicsEndImageContext();
+ }
+
+ // Set up output context.
+ UIGraphicsBeginImageContextWithOptions(self.size, NO, [UIScreen mainScreen].scale);
+ CGContextRef outputContext = UIGraphicsGetCurrentContext();
+ CGContextScaleCTM(outputContext, 1.0, -1.0);
+ CGContextTranslateCTM(outputContext, 0, -self.size.height);
+
+ // Draw base image.
+ CGContextDrawImage(outputContext, imageRect, self.CGImage);
+
+ // Draw effect image.
+ if (hasBlur) {
+ CGContextSaveGState(outputContext);
+ if (maskImage) {
+ CGContextClipToMask(outputContext, imageRect, maskImage.CGImage);
+ }
+ CGContextDrawImage(outputContext, imageRect, effectImage.CGImage);
+ CGContextRestoreGState(outputContext);
+ }
+
+ // Add in color tint.
+ if (tintColor) {
+ CGContextSaveGState(outputContext);
+ CGContextSetFillColorWithColor(outputContext, tintColor.CGColor);
+ CGContextFillRect(outputContext, imageRect);
+ CGContextRestoreGState(outputContext);
+ }
+
+ // Output image is ready.
+ UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext();
+ UIGraphicsEndImageContext();
+
+ return outputImage;
+}
+
+
+@end
--
Gitblit v1.8.0