iOS CIImage ยืดภาพ

แม้ว่าฉันจะตั้งค่า imageView เป็นspectFit แต่ดูเหมือนว่ารูปภาพที่สร้างผ่าน CIImage จะถูกปรับขนาดให้เต็มเสมอ

ตัวอย่างการโหลดรูปภาพง่ายๆ 2 วิธี:

// 1. load directly via UIImage
UIImage *imageByUIImage = [UIImage imageNamed:@"Megan-Fox-Look.jpg"];
self.uiImageView.image = imageByUIImage;

// 2. load via CIImage
NSString *filePath =
[[NSBundle mainBundle] pathForResource:@"Megan-Fox-Look" ofType:@"jpg"];
CIImage *ciImage =
[CIImage imageWithContentsOfURL:[NSURL fileURLWithPath:filePath]];
UIImage *imageByCIImage = [UIImage imageWithCIImage:ciImage scale:1.f orientation:UIImageOrientationUp];
self.ciImageView.image = imageByCIImage;

การดูรูปภาพ 2 รายการ (uiImageView และ ciImageView) มีแอตทริบิวต์ 'aspectFit' เหมือนกันและมีข้อจำกัดด้านขนาดเหมือนกัน (200x200) แต่มีเพียง (1) แสดงภาพอย่างถูกต้อง (2) ยืดภาพ

มีปัญหาอะไร? ขอบคุณ

ฉันสร้างโครงการของฉันด้วย Xcode 6.2

ป้อนคำอธิบายรูปภาพที่นี่


person vietstone    schedule 25.03.2015    source แหล่งที่มา
comment
ไม่ต้องกังวลเกี่ยวกับมัน เธอดูดีทีเดียว   -  person clearlight    schedule 25.03.2015
comment
คุณได้ลองเปลี่ยนคุณสมบัติรูปภาพ size.height หลังจากสร้าง UIImage แล้วหรือยัง ฉันรู้ว่านั่นไม่ใช่คำตอบ แต่มันเป็นวิธีแก้ปัญหาหรือไม่   -  person clearlight    schedule 25.03.2015
comment
ลองจำกัดความสูงให้กับมุมมองภาพของคุณ ดูคำถามนี้: stackoverflow.com/questions/16135216/   -  person atulkhatri    schedule 25.03.2015
comment
@atulkhatri มุมมองรูปภาพของฉันมีข้อ จำกัด ด้านความสูงแล้ว   -  person vietstone    schedule 25.03.2015
comment
@ 1sand0s รูปภาพมีขนาดเท่ากันคือ 1280x779 เมื่อฉันแก้ไขข้อบกพร่อง   -  person vietstone    schedule 25.03.2015


คำตอบ (2)


ลองโหลดผ่าน CIImage:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"abcd" ofType:@"png"];
CIImage *ciImage = [CIImage imageWithContentsOfURL:[NSURL fileURLWithPath:filePath]];
UIImage *imageByCIImage = [UIImage imageWithCIImage:ciImage scale:1.0f orientation:UIImageOrientationUp];

UIGraphicsBeginImageContext(imageByCIImage.size);
[imageByCIImage drawInRect:CGRectMake(0,0,imageByCIImage.size.width,imageByCIImage.size.height)];
UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
self.imageview.image = newImage;
UIGraphicsEndImageContext();
person atulkhatri    schedule 25.03.2015

เอกสาร CIImage ระบุว่า

แม้ว่าวัตถุ CIImage จะมีข้อมูลรูปภาพที่เกี่ยวข้องกัน แต่ก็ไม่ใช่รูปภาพ

ปัญหาการยืดออกอาจเกี่ยวข้องกับข้อเท็จจริงที่ว่า UIImageView จะจัดการการเรนเดอร์จริง และจากโพสต์อื่นๆ และเล่นกับ CIFilters อาจวาดหรือเรนเดอร์ด้วย CIContext โดยใช้มุมมองที่แก้ไขเป็นขอบเขต ไม่ใช่ขนาดรูปภาพต้นฉบับ

โพสต์ก่อนหน้านี้แก้ไขปัญหาได้ และบทความนี้ จาก Mattt กล่าวถึงตัวเลือกที่เห็นในโพสต์อื่นด้วย : ใช้ตัวแทนตัวกลาง CGImageRef

UIImage(cgImage: self.context.createCGImage(outputImage, from: outputImage.extent)!)
person lazi74    schedule 20.03.2019