2009-03-24 28 views
14

Tôi đang cố viết một hình động trên iPhone, không thành công nhiều, bị treo và không có gì có vẻ hoạt động.Tạo UIImage từ hai UII khác trên iPhone

Điều tôi muốn làm xuất hiện đơn giản, tạo UIImage và vẽ một phần của UIImage khác vào đó, tôi có chút bối rối với ngữ cảnh và lớp và nội dung.

Ai đó có thể giải thích cách viết một cái gì đó như thế (hiệu quả), với mã ví dụ?

+0

Bạn có thực sự muốn một UIImage mới (mà bạn có thể lưu vào đĩa hoặc gửi qua mạng chẳng hạn) hoặc bạn chỉ muốn lớp hai UIImages trên màn hình, một trên đỉnh khác? – rpetrich

+0

Tôi khuyên bạn nên có một cuốn sách giới thiệu tốt. Tôi hiện đang đọc cuốn sách này: http://www.iphonedevbook.com/ nó có các chương về vẽ và hoạt hình vv .. – bentford

+0

Tôi muốn một UIImage thực tế, vì vậy tôi có thể sử dụng nó trong một hình ảnh động. Tôi đọc một số tài liệu, nhưng tất cả đều cho thấy cách vẽ hộp và đường, chứ không phải hình ảnh thực tế phức tạp hơn. –

Trả lời

45

Đối với hồ sơ, điều này hóa ra là khá đơn giản - tất cả mọi thứ bạn cần biết là ở đâu đó trong ví dụ dưới đây:

+ (UIImage*) addStarToThumb:(UIImage*)thumb 
{ 
    CGSize size = CGSizeMake(50, 50); 
    UIGraphicsBeginImageContext(size); 

    CGPoint thumbPoint = CGPointMake(0, 25 - thumb.size.height/2); 
    [thumb drawAtPoint:thumbPoint]; 

    UIImage* starred = [UIImage imageNamed:@"starred.png"]; 

    CGPoint starredPoint = CGPointMake(0, 0); 
    [starred drawAtPoint:starredPoint]; 

    UIImage* result = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return result; 
} 
+0

Trong màn hình hiển thị võng mạc, chất lượng của hình ảnh kết quả kém. –

+3

cho chế độ retina, sử dụng 'UIGraphicsBeginImageContextWithOptions (size, NO, 0);' –

9

Tôi chỉ muốn thêm một nhận xét về câu trả lời ở trên bởi dpjanes, bởi vì nó là một câu trả lời tốt nhưng sẽ trông khối ô trên iPhone 4 (với màn hình hiển thị võng mạc độ phân giải cao), vì "UIGraphicsGetImageFromCurrentImageContext()" không hiển thị ở độ phân giải đầy đủ của iPhone 4.

Sử dụng "... WithOptions() " thay thế. Nhưng kể từ WithOptions không có sẵn cho đến khi iOS 4.0, bạn có thể liên kết yếu nó (discussed here) sau đó sử dụng đoạn mã sau để chỉ sử dụng phiên bản thuê nếu nó được hỗ trợ:

if (UIGraphicsBeginImageContextWithOptions != NULL) { 
    UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); 
} 
else { 
    UIGraphicsBeginImageContext(); 
} 
+1

đây phải là một chú thích –

3

Dưới đây là một ví dụ để hợp nhất hai hình ảnh mà có cùng kích thước thành một. Tôi không biết nếu điều này là tốt nhất và không biết nếu loại mã này được đăng ở một nơi khác. Đây là hai xu của tôi.

+ (UIImage *)mergeBackImage:(UIImage *)backImage withFrontImage:(UIImage *)frontImage 
{ 

    UIImage *newImage; 

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

    // Begin context 
    UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0); 

    // draw images 
    [backImage drawInRect:rect]; 
    [frontImage drawInRect:rect]; 

    // grab context 
    newImage = UIGraphicsGetImageFromCurrentImageContext(); 

    // end context 
    UIGraphicsEndImageContext(); 

    return newImage; 
} 

Hy vọng điều này sẽ hữu ích.

Các vấn đề liên quan