2013-07-03 25 views
6

Tôi muốn che một hình ảnh bằng cách chuyển một hình ảnh khác làm mặt nạ. Tôi có thể che giấu hình ảnh nhưng hình ảnh kết quả không tốt. Nó bị lởm chởm ở biên giới.IOS: Tạo mặt nạ cho hình ảnh giữ yếu tố tỷ lệ võng mạc trong tài khoản

Tôi đoán vấn đề có liên quan đến đồ họa võng mạc. Thuộc tính tỷ lệ cho hai hình ảnh khác nhau là:

  1. Hình ảnh mà từ đó tôi muốn mặt nạ có giá trị tỷ lệ 1. Hình ảnh này có độ phân giải lớn hơn 1000x1000 pixel.
  2. Hình ảnh theo đó tôi muốn hình ảnh kết quả (hình ảnh chỉ có màu đen và trắng) có giá trị tỷ lệ 2. Hình ảnh này thường có độ phân giải 300x300 pixel.

Hình ảnh thu được có giá trị quy mô của 1.

Mã Tôi đang sử dụng là:

+ (UIImage*) maskImage:(UIImage *)image withMask:(UIImage *)maskImage { 

CGImageRef maskRef = maskImage.CGImage; 

CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef), 
            CGImageGetHeight(maskRef), 
            CGImageGetBitsPerComponent(maskRef), 
            CGImageGetBitsPerPixel(maskRef), 
            CGImageGetBytesPerRow(maskRef), 
            CGImageGetDataProvider(maskRef), NULL, false); 


CGImageRef masked = CGImageCreateWithMask([image CGImage], mask); 
CGImageRelease(mask); 
UIImage *maskedImage = [UIImage imageWithCGImage:masked ]; 
CGImageRelease(masked); 
return maskedImage; 
} 

Làm thế nào tôi có thể nhận được một hình ảnh đeo mặt nạ mà sau quy mô võng mạc?

+0

Bạn nên cân nhắc xác nhận một câu trả lời nếu nó giúp bạn. – kokluch

+0

Tôi đã hỏi câu hỏi này vào ngày 3 tháng 7 năm 2013 và câu trả lời đầu tiên là vào ngày 8 tháng 1. Trong khoảng thời gian đó tôi đã chuyển sang các dự án khác nhau và tôi chưa kiểm tra xem câu trả lời có giúp hay không và nếu tôi không chắc thì làm cách nào tôi có thể chấp nhận bất cứ câu trả lời nào. Tôi chỉ muốn đóng câu hỏi nhưng không biết làm thế nào để làm điều đó. –

+0

Không khó để tìm ... – kokluch

Trả lời

5

Tôi gặp vấn đề tương tự. Có vẻ như dòng này bỏ qua yếu tố tỷ lệ.

UIImage *maskedImage = [UIImage imageWithCGImage:masked]; 

Vì vậy, bạn nên tự mình vẽ hình ảnh. Thay thế bằng cách sau:

UIGraphicsBeginImageContextWithOptions(image.size, NO, 0.0); 

CGContextRef context = UIGraphicsGetCurrentContext(); 

CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height); 

CGContextDrawImage(context, rect, masked); 

UIImage * maskedImage = UIGraphicsGetImageFromCurrentImageContext(); 

UIGraphicsEndImageContext(); 

Hoạt động tốt bởi tôi.

EDIT

HOẶC

UIImage * maskedImage = [UIImage imageWithCGImage:masked 
              scale:[[UIScreen mainScreen] scale] 
             orientation:UIImageOrientationUp]; 
4

Bạn có thể làm

UIImage * maskedImage = [UIImage imageWithCGImage:masked scale:[[UIScreen mainScreen] scale] orientation:UIImageOrientationUp]; 
Các vấn đề liên quan