2013-02-18 29 views
-3

我已經使用CGContextDrawImage渲染了幾個UIImage對象。但是當我將旋轉應用於圖像時,它不適用並且視圖消失。 code here渲染單個UIImage並旋轉必須應用

- (空)renderImage:(ItemView控件*)陣列 {

NSArray *selectedImages = self.slideView.selectedView.subviews; 

CGSize combinedSize = CGSizeMake(0, 0); 
for (int i = 0; i < [selectedImages count]; ++i) { 
    CGSize sourceSize = [selectedImages[i] size]; 
    NSLog(@"sdfsd %f %f ", sourceSize.width, sourceSize.height); 
    combinedSize.width = MAX(combinedSize.width, sourceSize.width); 
    combinedSize.height += sourceSize.height; 
} 



    UIGraphicsBeginImageContextWithOptions(self.view.frame.size, NO, 0); 
CGContextRef context = UIGraphicsGetCurrentContext(); 
{ 


    CGContextTranslateCTM(context, 0, 768); 
    CGContextScaleCTM(context, 1,-1); 




    for (int i = 0; i < [selectedImages count]; ++i) { 
     UIImageView *imageview = selectedImages[i]; 
     UIImage *sourceImage = imageview.image; 


     CGContextSaveGState(context); 

     float radians1 = atan2(imageview.transform.a, imageview.transform.b); 




     CGFloat angle = [(NSNumber *)[imageview valueForKeyPath:@"layer.transform.rotation.z"] floatValue]; 

     printf("\n radians %f",radians1); 
     printf("\n angle %f",angle); 

     CGContextRotateCTM(context, radians(angle)); 
     CGContextDrawImage(context, imageview.frame, imageview.image.CGImage); 
     CGContextRestoreGState(context); 

     //CGContextDrawImage(context, imageview.frame, imageview.image); 

    } 

} 
UIImage *combinedImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

UIImageWriteToSavedPhotosAlbum(combinedImage, nil, nil, nil); 

}

感謝,

任何幫助,將不勝感激

+0

「上面的圖片應該算是一個」的意思,給更多的信息 – NAZIK 2013-02-18 06:02:50

+1

呵呵?問題是什麼? – yeesterbunny 2013-02-18 06:03:17

+0

我認爲他建議上面和下面的圖像應該與前面的圖像堆積在一起。 – Shashank 2013-02-18 06:19:45

回答

0

比方說,你有一組源圖像:

NSArray *sourceImages = ...; 
// each element of sourceImages is a UIImage 

現在,您要從數組中取第一個count圖像並將它們垂直連接成一個新圖像。

CGSize combinedSize = CGSizeMake(0, 0); 
for (int i = 0; i < count; ++i) { 
    CGSize sourceSize = [sourceImages[i] size]; 
    combinedSize.width = MAX(combinedSize.width, sourceSize.width); 
    combinedSize.height += sourceSize.height; 
} 

接下來,創建該大小的圖形上下文:

UIGraphicsBeginImageContextWithOptions(combinedSize, NO, 0); { 

現在畫每個分量圖像劃分成圖形上下文在適當的位置:由找出的組合圖像的大小開始

CGFloat y = 0; 
    for (int i = 0; i < count; ++i) { 
     UIImage *sourceImage = sourceImages[i]; 
     [sourceImage drawAtPoint:CGPointMake(0, y)]; 
     y += sourceImage.size.height; 
    } 

最後,從上下文創建組合圖像和上下文的配置:

} 
UIImage *combinedImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

閱讀Drawing and Printing Guide for iOS - Drawing and Creating Images瞭解更多信息。

+0

非常感謝您的信息。它的作品。但如果我觸摸數組中的另一個圖像,整個圖像上下文應重繪。任何幫助?提前致謝 – iVenky 2013-02-18 06:51:08

0

我破解了答案。 @ rob mayoff:非常感謝誰幫助我。

code here 

//代碼來渲染圖像的組不包括已經在一個特定的視圖

被選擇的圖像 - (無效)renderImage:(ItemView控件*)將selectedItem {

NSArray *selectedImages = self.slideView.selectedView.subviews; 
int selectedItemIndex = [selectedImages indexOfObject:selectedItem]; 
if(selectedItem.image==nil){ 
    [selectedItem loadImageFromFile]; 
} 


// first set 
UIGraphicsBeginImageContextWithOptions(self.slideView.selectedView.frame.size, NO, 0); 
for (int i = 0; i < selectedItemIndex; ++i) { 

    if([selectedImages[i] isKindOfClass:[ItemView class]]){ 

     ItemView *imageview = (ItemView *)selectedImages[i]; 
     CGAffineTransform transform = imageview.transform; 
     imageview.transform = CGAffineTransformIdentity; 

     UIImage *image = [[UIImage alloc] initWithContentsOfFile:imageview.filename]; 
     UIImageView *renderImageView = [[UIImageView alloc] initWithImage:image]; //[imageview copy]; 
     renderImageView.frame = imageview.frame; 
     renderImageView.bounds = imageview.bounds; 
     imageview.transform = transform; 
     renderImageView.transform = transform; 
     renderImageView.center = CGPointMake(imageview.frame.size.width/2,imageview.frame.size.height/2); 
     UIView *view = [[UIView alloc] initWithFrame:renderImageView.frame]; 
     view.backgroundColor = [UIColor clearColor]; 
     [view addSubview:renderImageView]; 
     [renderImageView release]; 
     [image release]; 
     imageview.image = nil; 

     UIGraphicsBeginImageContext(imageview.frame.size); 
     CGContextRef context1 = UIGraphicsGetCurrentContext(); 
     [view.layer renderInContext:context1]; 
     UIImage *result = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 

     [view release]; 

     [result drawAtPoint:imageview.frame.origin]; 
    } 

} 
UIImage *combinedImage1 = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
//UIImageWriteToSavedPhotosAlbum(combinedImage1, nil, nil, nil); 


if (groupBgImage1) { 
    [groupBgImage1 removeFromSuperview]; 
    [groupBgImage1 release]; 
    groupBgImage1 = nil; 
} 
groupBgImage1 = [[UIImageView alloc] initWithImage:combinedImage1]; 
[self.slideView.selectedView insertSubview:groupBgImage1 belowSubview:selectedItem ]; 

// second set 
UIGraphicsBeginImageContextWithOptions(self.slideView.selectedView.frame.size, NO, 0); 
for (int i = selectedItemIndex+1; i < [selectedImages count]; ++i) { 


    if([selectedImages[i] isKindOfClass:[ItemView class]]){ 
     ItemView *imageview = (ItemView *)selectedImages[i]; 
     CGAffineTransform transform = imageview.transform; 
     imageview.transform = CGAffineTransformIdentity; 

     UIImage *image = [[UIImage alloc] initWithContentsOfFile:imageview.filename]; 
     UIImageView *renderImageView = [[UIImageView alloc] initWithImage:image]; //[imageview copy]; 
     renderImageView.frame = imageview.frame; 
     renderImageView.bounds = imageview.bounds; 
     imageview.transform = transform; 
     renderImageView.transform = transform; 
     renderImageView.center = CGPointMake(imageview.frame.size.width/2,imageview.frame.size.height/2); 
     UIView *view = [[UIView alloc] initWithFrame:renderImageView.frame]; 
     view.backgroundColor = [UIColor clearColor]; 
     [view addSubview:renderImageView]; 

     [renderImageView release]; 
     [image release]; 
     imageview.image = nil; 

     UIGraphicsBeginImageContext(imageview.frame.size); 
     CGContextRef context1 = UIGraphicsGetCurrentContext(); 
     [view.layer renderInContext:context1]; 
     UIImage *result = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 

     [view release]; 

     [result drawAtPoint:imageview.frame.origin]; 
    } 

} 
UIImage *combinedImage2 = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
UIImageWriteToSavedPhotosAlbum(combinedImage2, nil, nil, nil); 



if (groupBgImage2) { 
    [groupBgImage2 removeFromSuperview]; 
    [groupBgImage2 release]; 
    groupBgImage2 = nil; 
} 
groupBgImage2 = [[UIImageView alloc] initWithImage:combinedImage2]; 
[self.slideView.selectedView insertSubview:groupBgImage2 aboveSubview:selectedItem ]; 

}