1

画像にテキストを描画しようとしました。変換を適用しないと、画像は左下隅に描画され、画像とテキストは問題ありません(図2)が、左上の画像が必要です景色。

以下は私の drawRect 実装です。

テキストと画像が正しく配置されるように画像を反転する方法は?

また

ビューの左上に画像を移動する方法は?

次の関数呼び出しを使用しないと、ビューの下部に画像が作成されます (図 2)。

CGContextTranslateCTM(UIGraphicsGetCurrentContext(), 0.0, self.bounds.size.height);
CGContextScaleCTM(UIGraphicsGetCurrentContext(), 1.0, -1.0); 




 - (void)drawRect:(CGRect)rect
    {

         UIGraphicsBeginImageContext(self.bounds.size);

         // Fig 2 comment these lines to have Fig 2
         CGContextTranslateCTM(UIGraphicsGetCurrentContext(), 0.0, self.bounds.size.height);
         CGContextScaleCTM(UIGraphicsGetCurrentContext(), 1.0, -1.0);
        // Fig 2 Applying the above transformations results in Fig 1

         UIImage *natureImage = [UIImage imageNamed:@"Nature"];
         CGRect natureImageRect = CGRectMake(130, 380, 50, 50);
         [natureImage drawInRect:natureImageRect];


         UIFont *numberFont = [UIFont systemFontOfSize:28.0];
         NSFileManager *fm = [NSFileManager defaultManager];
         NSString * aNumber = @"111";
        [aNumber drawAtPoint:CGPointMake(100, 335) withFont:numberFont];    

        UIFont *textFont = [UIFont systemFontOfSize:22.0];
        NSString * aText = @"Hello";
        [aText drawAtPoint:CGPointMake(220, 370) withFont: textFont];
        self.image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

        NSData * imageData = UIImagePNGRepresentation(self.image);
        NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"Image.png"];
        NSLog(@"filePath :%@", filePath);

        BOOL isFileCreated = [fm createFileAtPath:filePath contents:imageData attributes:nil];

        if(isFileCreated)
        {
            NSLog(@"File created at Path %@",filePath);
        }

    }

翻訳適用時の反転画像

翻訳なしの左下隅の画像

4

3 に答える 3

0

これは、同じ画像を描画するために使用したコードです (ただし、自然の画像は使用していません)。draw rect ではありませんが、最終目標によっては、カスタム メソッドで draw rect の外でこれを行い、self.image を -(UIImage *)imageToDraw の結果に設定する方がよい場合があります。これは次のように出力されます。

フレームを微調整して、ものを揃えることができます

コードは次のとおりです。

- (UIImage *)imageToDraw
{
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(320, 480), NO, [UIScreen mainScreen].scale);
    UIImage *natureImage = [UIImage imageNamed:@"testImage.png"];
    [natureImage drawInRect:CGRectMake(130, 380, 50, 50)];

    UIFont *numberFont = [UIFont systemFontOfSize:28.0];
    NSString * aNumber = @"111";
    [aNumber drawAtPoint:CGPointMake(100, 335) withFont:numberFont];

    UIFont *textFont = [UIFont systemFontOfSize:22.0];
    NSString * aText = @"Hello";
    [aText drawAtPoint:CGPointMake(220, 370) withFont:textFont];

    UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return resultingImage;
}

- (NSString *)filePath
{
    NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    return [documentsDirectory stringByAppendingPathComponent:@"Image.png"];
}

- (void)testImageWrite
{
    NSData *imageData = UIImagePNGRepresentation([self imageToDraw]);
    NSError *writeError = nil;
    BOOL success = [imageData writeToFile:[self filePath] options:0 error:&writeError];
    if (!success || writeError != nil)
    {
        NSLog(@"Error Writing: %@",writeError.description);
    }
}

とにかく - これが役立つことを願っています

于 2013-04-04T13:13:59.767 に答える