2010-10-10 26 views
7

Tôi muốn mở rộng UIImage theo cách sao cho người dùng có thể thấy các pixel trong UIImage rất sắc nét. Khi tôi đặt nó vào một UIImageView và mở rộng ma trận biến đổi, UIImage xuất hiện antialiased và smoothed.Làm cách nào để mở rộng UIImage mà không làm phẳng bất cứ thứ gì?

Có cách nào để hiển thị trong ngữ cảnh bitmap lớn hơn bằng cách lặp lại mọi hàng và mỗi cột để có pixel lớn hơn không? Làm thế nào tôi có thể làm điều đó?

+0

yếu tố quy mô của bạn là gì? Hãy nhớ rằng chỉ cho x2, x3, x4, vv bạn có thể mong đợi để có được kết quả "sắc nét". – Eiko

+1

Lưu ý rằng phương pháp này được gọi là nội suy lân cận gần nhất. – BoltClock

Trả lời

20

#import <QuartzCore/CALayer.h>

view.layer.magnificationFilter = kCAFilterNearest

+3

Lưu ý rằng thao tác này không hoạt động nếu bạn đã tạo UIImage cho UIImageView bằng [UIImage imageWithCIImage: ci]; – marcelnijman

+2

ngoài ra, sử dụng 'view.layer.shouldRasterize = YES'. Điều này là để tránh sự cố trong đó một số hình ảnh hiển thị 4 pixel cho mỗi pixel. –

+0

@PeterDeWeese, Điều đó thật tuyệt vời và đạt được mục đích của tôi, nhưng tôi muốn hỏi, khi tôi sử dụng 'magnificationFilter = kCAFilterNearest', các pixel lớn và sắc nét có phóng to thực sự là các pixel gốc của ảnh hay chỉ được tạo ra bởi một số xử lý không? ! – Suge

2

Khi vẽ trực tiếp vào bối cảnh bitmap, chúng ta có thể sử dụng:

CGContextSetInterpolationQuality(myBitmapContext, kCGInterpolationNone); 

Tôi thấy điều này trên CGContextDrawImage very slow on iPhone 4

+0

Đó là câu trả lời tôi đang tìm kiếm !!! – fpg1503

1

Tôi cũng đã cố gắng này (trên một lớp con) và tôi không thể làm cho nó hoạt động, nó vẫn mờ. Đây là những gì tôi phải làm:

const CGFloat PIXEL_SCALE = 2; 
layer.magnificationFilter = kCAFilterNearest; //Nearest neighbor texture filtering 
layer.transform = CATransform3DMakeScale(PIXEL_SCALE, PIXEL_SCALE, 1); //Scale layer up 
//Rasterize w/ sufficient resolution to show sharp pixels 
layer.shouldRasterize = YES; 
layer.rasterizationScale = PIXEL_SCALE; 
+0

Cảm ơn bạn đã từng bị downvotes ... tâm trí giải thích vấn đề là gì với câu trả lời này? – Eliot

-1

Đối với UIImage tạo từ CIImage bạn có thể sử dụng:

imageView.image = UIImage(CIImage: ciImage.imageByApplyingTransform(CGAffineTransformMakeScale(kScale, kScale))) 
Các vấn đề liên quan