0

ソース画像があり、これを使用してさまざまなサイズのタイル画像を作成したいと考えています。

を使用してビューでこれを達成できることはわかっていますcolorWithPatternImage:が、出力をUIImageとして欲しいです。

最初に必要なサイズの UIView を作成して、これを試しました。

- (UIImage *)patternImageWithImage:(UIImage *)filteredImage andSize:(PatternImageSize)size; {

int numberOfRows;
int numberOfColoumns;

if (size == PatternImageSize3x3) {
    numberOfRows = 3;
    numberOfColoumns = 3;
}
else
{
    numberOfRows = 15;
    numberOfColoumns = 15;
}

float width = filteredImage.size.width;
float height = filteredImage.size.height;

UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, width * numberOfColoumns, height * numberOfRows)];
view.backgroundColor = [UIColor colorWithPatternImage:filteredImage];
[view.layer setOpaque:NO];

UIImage* patternImage = [self imageWithView:view];
return patternImage; }

次に、このビューから UIImage を作成します。

- (UIImage *)imageWithView:(UIView *)view {
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];

UIImage * img = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

return img; }

これは、非常にメモリを集中的に使用するアプローチであることが判明しました。この結果を達成するためのより最適化された方法はありますか?

4

1 に答える 1

0

OK、CGContextで画像を描画することでこれを解決しました:

UIGraphicsBeginImageContext(CGSizeMake(width * numberOfColoumns, height * numberOfRows));

for (int ii = 0; ii < numberOfRows; ii++) {
    for (int jj = 0; jj < numberOfColoumns; jj++) {
        float x = jj * width;
        float y = ii * height;
        [filteredImage drawInRect:CGRectMake(x, y, width, height)];
    }
}

UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
于 2013-09-05T11:14:49.437 に答える