0

現在、C99エラーが発生するため、コードのUIGetScreenImage()を置き換えています。

私はそれをアップルからのこのコードに置き換えています。このコードは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また、返す前にメソッドでトリミングしてみましたが、役に立ちませんでした。

どちらの試行でもUIImage、メソッドから返されるクロップされていないscreenshotものが保存されます。

私が省略している明らかなものはありますか?このSOスレッドを見ましたが、接続がわかりません。

4

1 に答える 1

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
}

このコードがあなたのお役に立ちますように。

于 2012-08-22T11:48:49.620 に答える