2012-08-22 117 views
0

我目前正在替換UIGetScreenImage()在我的代碼中,因爲它導致C99錯誤。裁剪UIImage屏幕截圖

我將其替換爲this code from apple,其中screenshot方法返回UIImage。是

我在裁剪並保存圖像嘗試如下:

UIImage *returnedImage = [self screenshot]; 
// Get image to save 
CGImageRef screen = returnedImage.CGImage; 
UIImage *img = [UIImage imageWithCGImage:screen]; 

// Image cropping 
CGImageRef imageRef = CGImageCreateWithImageInRect([img CGImage], CGRectMake(0, 5, 768, 1004)); 
UIImage *img2Save = [UIImage imageWithCGImage:imageRef]; 
CGImageRelease(imageRef); 

// Request to save the image to camera roll 
UIImageWriteToSavedPhotosAlbum(img2Save, self, nil, nil); 

我也試圖在screenshot方法種植前把它返回它,但無濟於事。

保存從screenshot方法返回的兩個嘗試中未返回的未修改的UIImage

有什麼明顯的我離開了嗎?我曾看過this SO thread,但無法看到連接。

回答

1

請嘗試以下代碼

- (UIImage*)imageByCropping:(UIImage *)imageToCrop toRect:(CGRect)rect 
{ 
    //create a context to do our clipping in 
    UIGraphicsBeginImageContext(rect.size); 
    CGContextRef currentContext = UIGraphicsGetCurrentContext(); 

    //create a rect with the size we want to crop the image to 
    //the X and Y here are zero so we start at the beginning of our 
    //newly created context 
    CGRect clippedRect = CGRectMake(0, 0, rect.size.width, rect.size.height); 
    CGContextClipToRect(currentContext, clippedRect); 

    //create a rect equivalent to the full size of the image 
    //offset the rect by the X and Y we want to start the crop 
    //from in order to cut off anything before them 
    CGRect drawRect = CGRectMake(rect.origin.x * -1, 
           rect.origin.y * -1, 
           imageToCrop.size.width, 
           imageToCrop.size.height); 

    //draw the image to our clipped context using our offset rect 
    CGContextDrawImage(currentContext, drawRect, imageToCrop.CGImage); 

    //pull the image from our cropped context 
    UIImage *cropped = UIGraphicsGetImageFromCurrentImageContext(); 

    //pop the context to get back to the default 
    UIGraphicsEndImageContext(); 

    //Note: this is autoreleased 
    return cropped; 
} 

然後用類似調用代碼:

- (void)drawRect:(CGRect)rect 
{ 
    //draw the whole lights off image 
    //the on images will be drawn overtop 
    [lightsOffImage drawInRect:rect]; 

    //if we don't have any lights on... no point in continuing 
    if(numberOfLightsOn < 1) 
    return; 

    //figure out the dimensions of numberOfLights on bulbs 
    CGSize croppedSize = CGSizeMake(LIGHT_WIDTH * numberOfLightsOn, LIGHT_HEIGHT); 
    CGRect clippedRect = CGRectMake(0, 0, croppedSize.width, croppedSize.height); 

    //get the "on" bulbs by cropping the image 
    UIImage *cropped = [self imageByCropping:lightsOnImage toRect:clippedRect]; 

    //create a rect to draw the newly cropped on images to 
    CGRect lightsOnRect = CGRectMake(LIGHT_BULB_OFFSET_X, 
            LIGHT_BULB_OFFSET_Y, 
            croppedSize.width, 
            croppedSize.height); 

    //draw the "on" lights 
    [cropped drawInRect:lightsOnRect]; 

    //cropped is autoreleased so no need to worry about cleanup 
} 

可能這個代碼幫助你。

+0

嗨@neon samuel,我試圖從其他線程調用該函數。會發生什麼似乎是翻轉圖片並縮小圖像。這是由於我傳遞給它的座標嗎?我不認爲它會因爲我傳遞給該方法的前兩個參數是0而失敗。 –