UIImage
অনুভূমিকভাবে কীভাবে উল্টাতে হবে , শ্রেণীর রেফারেন্সে আমি UIImageOrientationUpMirrored
গণনা মানটি পেয়েছি UIImage
, কীভাবে এই সম্পত্তিটি ফ্লিপ করতে ব্যবহার করব UIImage
।
UIImage
অনুভূমিকভাবে কীভাবে উল্টাতে হবে , শ্রেণীর রেফারেন্সে আমি UIImageOrientationUpMirrored
গণনা মানটি পেয়েছি UIImage
, কীভাবে এই সম্পত্তিটি ফ্লিপ করতে ব্যবহার করব UIImage
।
উত্তর:
উদ্দেশ্য গ
UIImage* sourceImage = [UIImage imageNamed:@"whatever.png"];
UIImage* flippedImage = [UIImage imageWithCGImage:sourceImage.CGImage
scale:sourceImage.scale
orientation:UIImageOrientationUpMirrored];
দ্রুতগতি
let flippedImage = myImage.withHorizontallyFlippedOrientation()
UIImageOrientationUp
সময় কাজ UIImageOrientationUpMirrored
করেছে। এটি কাজ করেছে -image = [UIImage imageWithCGImage:image.CGImage scale:image.scale orientation:UIImageOrientationUp]
sourceImage.scale
স্কেলের জন্য ব্যবহার করা ভাল ।
[flippedImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]
। কোন ধারণা কেন?
আপনি এটি অর্জন করার একটি খুব সহজ উপায় হ'ল একটি ইউআইআইমেজটির পরিবর্তে একটি ইউআইআইমেজভিউ তৈরি করা এবং ইউআইআইমেজভিউতে রূপান্তর করা।
yourImageView.image =[UIImage imageNamed:@"whatever.png"];
yourImageView.transform = CGAffineTransform(scaleX: -1, y: 1); //Flipped
আশাকরি এটা সাহায্য করবে.
UIImage
ম্যানিপুলেশনের চেয়ে আমার পক্ষে আরও ভাল কাজ করে , যা UIImageRenderingModeAlwaysTemplate
রেন্ডারিং মোডের সাথে মিলিত হওয়ার সাথে সাথে আমার পার্শ্ব প্রতিক্রিয়া হয়েছিল ।
yourImageView.transform = CGAffineTransformIdentity
উল্লম্ব ফ্লিপ প্রায়শই ব্যবহার করে ওপেনএল টেক্সচার শুরু করার প্রয়োজন হয় glTexImage2d(...)
। উপরের প্রস্তাবিত কৌশলগুলি চিত্রের ডেটা পরিবর্তন করে না এবং এই ক্ষেত্রে কার্যকর হবে না। Https://stackoverflow.com/a/17909372 দ্বারা অনুপ্রাণিত প্রকৃত ডেটা ফ্লিপ করার জন্য এখানে একটি কোড
- (UIImage *)flipImage:(UIImage *)image
{
UIGraphicsBeginImageContext(image.size);
CGContextDrawImage(UIGraphicsGetCurrentContext(),CGRectMake(0.,0., image.size.width, image.size.height),image.CGImage);
UIImage *i = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return i;
}
আমি ইমেজফ্লিপড ফর রাইটটও লেফট লেআউটডাইরেক্টেশন দিয়ে চেষ্টা করেছি এবং ডিফেরেন্ট ওরিয়েন্টেশন সহ একটি নতুন ইউআইআইমেজ তৈরি করেছি তবে কমপক্ষে আমার ইমেজ উল্টানোর জন্য এটিই আমি খুঁজে পেয়েছি
let ciimage: CIImage = CIImage(CGImage: imagenInicial.CGImage!)
let rotada3 = ciimage.imageByApplyingTransform(CGAffineTransformMakeScale(-1, 1))
আপনি আমার খেলার মাঠে দেখতে পারেন এটি কাজ করে !! :)
এবং অবশ্যই, চূড়ান্তআইমেজ = ইউআইআইমেজ (সিআইআইমেজ: রটাডা 3) আসুন
ইমেজ ওরিয়েন্টেশন যেমন সংজ্ঞায়িত করে:
typedef NS_ENUM(NSInteger, UIImageOrientation) {
UIImageOrientationUp, // default orientation
UIImageOrientationDown, // 180 deg rotation
UIImageOrientationLeft, // 90 deg CCW
UIImageOrientationRight, // 90 deg CW
UIImageOrientationUpMirrored, // as above but image mirrored along other axis. horizontal flip
UIImageOrientationDownMirrored, // horizontal flip
UIImageOrientationLeftMirrored, // vertical flip
UIImageOrientationRightMirrored, // vertical flip
};
আমি অ্যাভিক্যাপচারসেশন থেকে ইউআইআইমেজ পরিচালনা করার মতো আরও পরিস্থিতির জন্য কিছু উন্নতি করেছি।
UIImage* sourceImage = [UIImage imageNamed:@"whatever.png"];
UIImageOrientation flipingOrientation;
if(sourceImage.imageOrientation>=4){
flippedOrientation = sourceImage.imageOrientation - 4;
}else{
flippedOrientation = sourceImage.imageOrientation + 4;
}
UIImage* flippedImage = [UIImage imageWithCGImage:sourceImage.CGImage
scale: sourceImage.scale orientation: flipingOrientation];
এখানে দ্রুততম সংস্করণ: (আমি মন্তব্যটিতে এই প্রশ্নটি দেখেছি)
let srcImage = UIImage(named: "imageName")
let flippedImage = UIImage(CGImage: srcImage.CGImage, scale: srcImage.scale, orientation: UIImageOrientation.UpMirrored)
আইওএস 10+
[myImage imageWithHorizontallyFlippedOrientation];
সুইফট 4:
let flippedImage = myImage.withHorizontallyFlippedOrientation()
অনুভূমিকভাবে একটি UIImage আয়না / ফ্লিপ করার জন্য এটি একটি দৃ implementation় বাস্তবায়ন এবং এটি চিত্রের পিছনে পিছনে প্রয়োগ করতে পারে। যেহেতু এটি অন্তর্নিহিত চিত্রের ডেটা পরিবর্তন করে, অঙ্কন (যেমন, স্ক্রিনশট) এছাড়াও পরিবর্তন হবে। কাজ করার জন্য পরীক্ষিত, কোনও মানের ক্ষতি হয় না।
func flipImage() -> UIImage? {
UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
let bitmap = UIGraphicsGetCurrentContext()!
bitmap.translateBy(x: size.width / 2, y: size.height / 2)
bitmap.scaleBy(x: -1.0, y: -1.0)
bitmap.translateBy(x: -size.width / 2, y: -size.height / 2)
bitmap.draw(self.cgImage!, in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image?
}
এটি কারওর জন্য ব্যবহারযোগ্য হবে:
UIImageOrientation imageOrientation;
switch (sourceImage.imageOrientation) {
case UIImageOrientationDown:
imageOrientation = UIImageOrientationDownMirrored;
break;
case UIImageOrientationDownMirrored:
imageOrientation = UIImageOrientationDown;
break;
case UIImageOrientationLeft:
imageOrientation = UIImageOrientationLeftMirrored;
break;
case UIImageOrientationLeftMirrored:
imageOrientation = UIImageOrientationLeft;
break;
case UIImageOrientationRight:
imageOrientation = UIImageOrientationRightMirrored;
break;
case UIImageOrientationRightMirrored:
imageOrientation = UIImageOrientationRight;
break;
case UIImageOrientationUp:
imageOrientation = UIImageOrientationUpMirrored;
break;
case UIImageOrientationUpMirrored:
imageOrientation = UIImageOrientationUp;
break;
default:
break;
}
resultImage = [UIImage imageWithCGImage:sourceImage.CGImage scale:sourceImage.scale orientation:imageOrientation];
সুইফ্ট 3/4 এর জন্য:
imageView.transform = CGAffineTransform(scaleX: -1, y: 1)
একটি সাধারণ এক্সটেনশন।
extension UIImage {
var flipped: UIImage {
guard let cgImage = cgImage else {
return self
}
return UIImage(cgImage: cgImage, scale: scale, orientation: .upMirrored)
}
}
ব্যবহার:
let image = #imageLiteral(resourceName: "imageName")
let imageView = UIImageView(image: image.flipped)
এটি একটি কার্যকারী iOS8 / 9 সামঞ্জস্যপূর্ণ সংস্করণ:
UIImage *image = [UIImage imageNamed:name];
if ([[UIApplication sharedApplication] userInterfaceLayoutDirection] == UIUserInterfaceLayoutDirectionRightToLeft) {
if ([image respondsToSelector:@selector(imageFlippedForRightToLeftLayoutDirection)]) {
//iOS9
image = image.imageFlippedForRightToLeftLayoutDirection;
}
else {
//iOS8
CIImage *coreImage = [CIImage imageWithCGImage:image.CGImage];
coreImage = [coreImage imageByApplyingTransform:CGAffineTransformMakeScale(-1, 1)];
image = [UIImage imageWithCIImage:coreImage scale:image.scale orientation:UIImageOrientationUp];
}
}
return image;
imageFlippedForRightToLeftLayoutDirection
ফ্লিপযুক্ত বিন্যাসের দিকনির্দেশের সাহায্যে ব্যবহৃত হয় - উদাহরণস্বরূপ আরব দেশগুলির জন্য। সুতরাং এটি ব্যবহার করা সর্বদা পছন্দসই হিসাবে কাজ করবে না।
উপরের সুইফ্ট 3 এবং তার উপর পরীক্ষিত
এক্সটেনশন সহ এই সমস্যাটি অর্জনের সহজ সমাধান এখানে। আমি এটি পরীক্ষা করি এবং এটি কাজ করে। আপনি যে কোনও দিকে আয়না করতে পারেন।
extension UIImage {
func imageUpMirror() -> UIImage {
guard let cgImage = cgImage else { return self }
return UIImage(cgImage: cgImage, scale: scale, orientation: .upMirrored)
}
func imageDownMirror() -> UIImage {
guard let cgImage = cgImage else { return self }
return UIImage(cgImage: cgImage, scale: scale, orientation: .downMirrored)
}
func imageLeftMirror() -> UIImage {
guard let cgImage = cgImage else { return self }
return UIImage(cgImage: cgImage, scale: scale, orientation: .leftMirrored)
}
func imageRightMirror() -> UIImage {
guard let cgImage = cgImage else { return self }
return UIImage(cgImage: cgImage, scale: scale, orientation: .rightMirrored)
}
}
এই কোডের জন্য ব্যবহার
let image = #imageLiteral(resourceName: "imageName")
flipHorizontally = image.imageUpMirror()
সুতরাং, আপনি অন্যান্য ফাংশন ব্যবহার করতে পারেন।
উপরে পরিবর্তিত এবং সুইফট 3- এ দেওয়া উত্তরগুলির মধ্যে একটি এখানে আমি বিশেষভাবে কার্যকর পেয়েছি যখন আপনার কাছে একটি বোতাম রয়েছে যা ইমেজটি পিছনে পিছনে ফ্লিপ করতে হবে।
func flipImage(sourceImage: UIImage,orientation: UIImageOrientation) -> UIImage {
var imageOrientation = orientation
switch sourceImage.imageOrientation {
case UIImageOrientation.down:
imageOrientation = UIImageOrientation.downMirrored;
break;
case UIImageOrientation.downMirrored:
imageOrientation = UIImageOrientation.down;
break;
case UIImageOrientation.left:
imageOrientation = UIImageOrientation.leftMirrored;
break;
case UIImageOrientation.leftMirrored:
imageOrientation = UIImageOrientation.left;
break;
case UIImageOrientation.right:
imageOrientation = UIImageOrientation.rightMirrored;
break;
case UIImageOrientation.rightMirrored:
imageOrientation = UIImageOrientation.right;
break;
case UIImageOrientation.up:
imageOrientation = UIImageOrientation.upMirrored;
break;
case UIImageOrientation.upMirrored:
imageOrientation = UIImageOrientation.up;
break;
}
return UIImage(cgImage: sourceImage.cgImage!, scale: sourceImage.scale, orientation: imageOrientation)
}
ব্যবহার করুন:
imageToFlip: UIImage = flipImage(sourceImage: imageToFlip, orientation: imageToFlip.imageOrientation)
সুইফট 4
yourImage.transform = CGAffineTransform(scaleX: -1, y: 1)
আন-র্যাপিংয়ের কারণে নিম্নলিখিতটি করুন:
let srcImage = UIImage(named: "myimage")!
let flippedImage = UIImage(cgImage: srcImage.cgImage!,
scale: srcImage.scale, orientation: UIImage.Orientation.upMirrored)
আপনি এটি ব্যবহার করতে চাইলে চিত্রটি ঘোরান
সুইফট 4
extension UIImage {
public func imageRotatedByDegrees(degrees: CGFloat, flip: Bool) -> UIImage {
let radiansToDegrees: (CGFloat) -> CGFloat = {
return $0 * (180.0 / CGFloat(M_PI))
}
let degreesToRadians: (CGFloat) -> CGFloat = {
return $0 / 180.0 * CGFloat(M_PI)
}
// calculate the size of the rotated view's containing box for our drawing space
let rotatedViewBox = UIView(frame: CGRect(origin: CGPoint.zero, size: size))
let t = CGAffineTransform(rotationAngle: degreesToRadians(degrees));
rotatedViewBox.transform = t
let rotatedSize = rotatedViewBox.frame.size
// Create the bitmap context
UIGraphicsBeginImageContext(rotatedSize)
let bitmap = UIGraphicsGetCurrentContext()!
bitmap.translateBy(x: rotatedSize.width / 2.0, y: rotatedSize.height / 2.0)
// Move the origin to the middle of the image so we will rotate and scale around the center.
//CGContextTranslateCTM(bitmap, rotatedSize.width / 2.0, rotatedSize.height / 2.0);
// // Rotate the image context
bitmap.rotate(by: degreesToRadians(degrees))
// CGContextRotateCTM(bitmap, degreesToRadians(degrees));
// Now, draw the rotated/scaled image into the context
var yFlip: CGFloat
if(flip){
yFlip = CGFloat(-1.0)
} else {
yFlip = CGFloat(1.0)
}
bitmap.scaleBy(x: yFlip, y: -1.0)
//CGContextScaleCTM(bitmap, yFlip, -1.0)
bitmap.draw(self.cgImage!, in: CGRect.init(x: -size.width / 2, y: -size.height / 2, width: size.width, height: size.height))
// CGContextDrawImage(bitmap, CGRectMake(-size.width / 2, -size.height / 2, size.width, size.height), CGImage)
let newImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return newImage
}
}
সুইফ্ট 5 - এক্সকোড 11.5
অনুভূমিকভাবে ঘোরার জন্য সেরা সমাধান: এই ভিডিওটি দেখুন:
https://m.youtube.com/watch?v=4kSLbuB-MlU
অথবা এই কোডটি ব্যবহার করুন:
import UIKit
class FirstViewControl: UIViewController {
@IBOutlet weak var buttonAnim: UIButton!
@IBAction func ClickOnButtonAnim(_ sender: UIButton) {
UIView.transition(with: buttonAnim, duration: 0.4, options: .transitionFlipFromLeft, animation: nil , completion: nil)
}
}
আপনি এই অ্যানিমেশনটিতে যে কোনও ইউআই (বোতাম বা লেবেল বা ইউভিউ বা চিত্র) ব্যবহার করতে পারেন।