iOS CIImage meregangkan gambar

Meskipun saya menyetel imageView saya sebagai aspekFit, tampaknya gambar yang dibuat melalui CIImage akan selalu diskalakan hingga terisi.

Contoh sederhana memuat gambar dengan 2 cara:

// 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 tampilan gambar (uiImageView dan ciImageView) memiliki atribut 'aspectFit' yang sama dan batasan ukuran yang sama (200x200). Namun hanya (1) menampilkan gambar dengan benar, (2) meregangkan gambar.

Apa masalahnya? Terima kasih.

Saya membuat proyek saya dengan Xcode 6.2

masukkan deskripsi gambar di sini


person vietstone    schedule 25.03.2015    source sumber
comment
Jangan khawatir tentang hal itu. Bagaimanapun, dia terlihat cukup baik.   -  person clearlight    schedule 25.03.2015
comment
Sudahkah Anda mencoba mengubah properti size.height gambar setelah Anda membuat UIImage? Saya menyadari itu bukanlah jawaban, tetapi apakah ini solusinya?   -  person clearlight    schedule 25.03.2015
comment
Coba berikan batasan ketinggian pada tampilan gambar Anda. Lihat pertanyaan ini: stackoverflow.com/questions/16135216/   -  person atulkhatri    schedule 25.03.2015
comment
@atulkhatri tampilan gambar saya sudah memiliki batasan tinggi   -  person vietstone    schedule 25.03.2015
comment
@ 1sand0s Kedua gambar berukuran sama yaitu 1280x779 saat saya melakukan debug.   -  person vietstone    schedule 25.03.2015


Jawaban (2)


Coba ini untuk memuat melalui 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

Dokumen CIImage menyatakan bahwa

Meskipun objek CIImage memiliki data gambar yang terkait dengannya, objek tersebut bukanlah gambar

Masalah peregangan mungkin terkait dengan fakta bahwa UIImageView akan mengelola rendering sebenarnya. Dan dari postingan lain dan bermain-main dengan CIFilters, mungkin ia menggambar atau merender dengan CIContext menggunakan view rect sebagai wilayahnya, bukan ukuran gambar aslinya.

Postingan sebelumnya memecahkan masalah ini, dan artikel ini dari Mattt juga menyebutkan opsi yang terlihat di postingan lain : gunakan representasi perantara CGImageRef.

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