Spaces:
Runtime error
Runtime error
| // Copyright 2019 The TensorFlow Authors. All Rights Reserved. | |
| // | |
| // Licensed under the Apache License, Version 2.0 (the "License"); | |
| // you may not use this file except in compliance with the License. | |
| // You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, software | |
| // distributed under the License is distributed on an "AS IS" BASIS, | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| // See the License for the specific language governing permissions and | |
| // limitations under the License. | |
| // ============================================================================= | |
| import Accelerate | |
| import Foundation | |
| extension CGSize { | |
| /// Returns `CGAfineTransform` to resize `self` to fit in destination size, keeping aspect ratio | |
| /// of `self`. `self` image is resized to be inscribe to destination size and located in center of | |
| /// destination. | |
| /// | |
| /// - Parameter toFitIn: destination size to be filled. | |
| /// - Returns: `CGAffineTransform` to transform `self` image to `dest` image. | |
| func transformKeepAspect(toFitIn dest: CGSize) -> CGAffineTransform { | |
| let sourceRatio = self.height / self.width | |
| let destRatio = dest.height / dest.width | |
| // Calculates ratio `self` to `dest`. | |
| var ratio: CGFloat | |
| var x: CGFloat = 0 | |
| var y: CGFloat = 0 | |
| if sourceRatio > destRatio { | |
| // Source size is taller than destination. Resized to fit in destination height, and find | |
| // horizontal starting point to be centered. | |
| ratio = dest.height / self.height | |
| x = (dest.width - self.width * ratio) / 2 | |
| } else { | |
| ratio = dest.width / self.width | |
| y = (dest.height - self.height * ratio) / 2 | |
| } | |
| return CGAffineTransform(a: ratio, b: 0, c: 0, d: ratio, tx: x, ty: y) | |
| } | |
| } | |