0

我面临的一般问题是:

我有一个可拉伸的 50x50 PNG。我将它拉伸到 300x100。我想从下图中的拉伸图像 A、B 和 C 中截取三个大小为 100x100 的 UIImage:

在此处输入图像描述

我正在尝试这样做:

// stretchedImage is the 50x50 UIImage, abcImageView is the 300x100 UIImageView
UIImage *stretchedImage = [abcImageView.image stretchableImageWithLeftCapWidth:25 topCapHeight:25];
CGImageRef image = CGImageCreateWithImageInRect(stretchedImage.CGImage, bButton.frame);
UIImage *result = [UIImage imageWithCGImage:image];
[bButton setBackgroundImage:result forState:UIControlStateSelected];
CGImageRelease(image);

我正在尝试使用 CGImageCreateWithImageInRect 裁剪中间 100(“B”),但这不正确,因为stretchedImage 是 50x50,而不是 300x100。如何从 300x100 图像中裁剪?如果原始图像是 300x100 就没有问题,但是我会失去可拉伸图像的优势。

我想进一步概括这个问题,问题很简单:如果你将图像缩放或拉伸到更大的图像视图,你如何获得缩放/拉伸的图像?

我想应用解决方案的特定任务的背景(如果您能提出替代解决方案):

我正在尝试实现一个类似于您在本机 iPhone 呼叫应用程序中看到的 UI:一个包含静音、扬声器、保持等按钮的板。其中一些是具有不同背景颜色的切换类型按钮选定的状态。

我有两个用于整个盘子的图形,用于非选定和选定状态。我将两个图像都拉伸到所需的大小。对于处于选定状态的按钮,我想获得一块拉伸的选定图形。

4

1 回答 1

0

您应该能够通过渲染abcImageViewUIImage

UIGraphicsBeginImageContextWithOptions(abcImageView.bounds.size, NO, 0.f);
[abcImageView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

然后,您可以像这样裁剪图像(给定cropRect):

CGImageRef cgImage = CGImageCreateWithImageInRect(image.CGImage, cropRect);
UIImage *croppedImage = [UIImage imageWithCGImage:cgImage];
// Do something with the image.
CGImageRelease(cgImage);
于 2013-07-15T18:47:57.883 回答