0

私は主にSOから取得した次のコードを持っていますが、画像がまだトリミングされていません、何が間違っていますか?

@synthesize TopImage;
@synthesize BottomImage;
@synthesize RotaterImage;

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
    TopImage = [UIImage imageNamed:@"zero.png"];
    [TopImage drawAtPoint:CGPointMake(0, 0)];
    [self cropImage:TopImage:0];
    [self addSubview:[[UIImageView alloc] initWithImage:TopImage]];
//        BottomImage = [UIImage imageNamed:@"zero.png"];
//        [BottomImage drawAtPoint:CGPointMake(0, 55)];
//        [self cropImage:BottomImage:50];
//        [self addSubview:[[[UIImageView alloc] initWithImage:BottomImage]retain]];
//        RotaterImage = [UIImage imageNamed:@"zero.png"];
//        [RotaterImage drawAtPoint:CGPointMake(0, 0) blendMode:kCGBlendModeNormal alpha:0];
//        [self addSubview:[[[UIImageView alloc] initWithImage:RotaterImage]retain]];
//        [self cropImage:RotaterImage:50];
    }
    return self;
}

-(void)cropImage:(UIImage *)image:(int)startCroppingPosition{
  CGRect tempRect = CGRectMake(0, startCroppingPosition, 23, 40);
  CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], tempRect);
  // or use the UIImage wherever you like
  image = [UIImage imageWithCGImage:imageRef]; 
  CGImageRelease(imageRef);
}

私はIOSを初めて使用するので、助けていただければ幸いです。

4

2 に答える 2

2

あなたは新しいトリミングされた画像を作成していますが、initそれについてメソッドに伝えていません:)

この変更を試してください:

-(UIImage *)cropImage:(UIImage *)image:(int)startCroppingPosition{
  CGRect tempRect = CGRectMake(0, startCroppingPosition, 23, 40);
  CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], tempRect);
  // or use the UIImage wherever you like
  UIImage *newImage = [UIImage imageWithCGImage:imageRef]; 
  CGImageRelease(imageRef);
  return newImage;
}

そして、でinit、置き換えます

[TopImage drawAtPoint:CGPointMake(0, 0)];

UIImageView* topImageView = [[UIImageView alloc] initWithImage:topImage];
topImageView.frame = CGRectMake(x,y,width,height);

これで、cropメソッドは新しくトリミングされた画像を返し、それをに保存しTopImageます。


その他のアドバイス:

クラス名はCapitalLetterで始まり、変数は小文字で始まります。TopImage本当にする必要がありますtopImage

また、メソッドでは常に名前付きパラメーターを使用するので、

-(void)cropImage:(UIImage *)image:(int)startCroppingPosition

次のようなものにする必要があります

-(void)cropImage:(UIImage *)image startPosition:(int)startCroppingPosition

これにより、1か月後にコードに戻ったときに、コードがはるかに読みやすくなります(過去に困難な方法であったことを学びました!)

于 2012-06-15T18:51:39.977 に答える
0

UIImageViewの画像ではなく、画像を変更するだけです。

私がすることは置き換えることです:

[self addSubview:[[UIImageView alloc] initWithImage:TopImage]];

UIImageView *iv = [[UIImageView alloc] initWithImage:TopImage]];
iv.tag = 1000 //number does not matter 
[self.view addSubview:iv];
[iv release];

次に、トリミング画像に次を追加します。

UIImageView *iv = [self.vief viewWithTag:1000];
iv.image = [UIImage imageWithCGImage:imageRef]; 

これで期待どおりに機能するはずです。

于 2012-06-15T18:51:18.977 に答える