L7ColWinters
L7ColWinters

Reputation: 1362

my image is not getting cropped

i have the following code that i mostly got from SO but my image still is not getting cropped, what am i doing wrong?

@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);
}

I am very new to IOS so any help is appreciated

Upvotes: 0

Views: 170

Answers (2)

deanWombourne
deanWombourne

Reputation: 38475

You're creating a new cropped image but not telling the init method about it :)

Try this change :

-(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;
}

and, in init, replace

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

with

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

Your crop method now returns the newly cropped image and stores it in TopImage.


Other advice :

Class names begin with a CapitalLetter, variables begin with lowercase. TopImage should really be topImage.

Also, I would always use named parameters in your methods, so

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

should be something like

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

That will make your code much much more readable when you come back to it in a month's time (I've learned that the hard way in the past!)

Upvotes: 2

Ladislav
Ladislav

Reputation: 7283

You are only changing the image and not the image of the UIImageView,

What I would do is replace:

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

with

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

then in crop image you just add:

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

This should then work as expected!

Upvotes: 0

Related Questions