在編寫程序的時候我們常常使用self.scale來讓我們使用的圖片放大和縮小,但這種變化並沒有真正意義上讓我們的圖片的大小發生改變,當我們要對這種圖片進行點擊或其他操作的時候常常會發生錯誤,這里我使用另外一種方法實現這個效果,完成真正意義上的圖片放大和縮小。
這里附上主要代碼:
1 - (void) onItem2:(id)sender 2 { 3 CGSize size = _sprt2.contentSize; 4 NSLog(@"\n before modified: image2: width:%f height:%f", size.width, size.height); 5 CCRenderTexture *aRenderTexture = [CCRenderTexture renderTextureWithWidth:1024 height:768]; 6 [aRenderTexture begin]; 7 [self visit]; 8 [aRenderTexture end]; 9 CCSprite *sp = [CCSprite spriteWithTexture:aRenderTexture.sprite.texture]; 10 [sp setFlipY:YES]; 11 [self removeAllChildrenWithCleanup:YES]; 12 13 UIImage *image = [self convertSpriteToImage:sp]; 14 UIImage *newImage = [self scaleFromImage:image toSize:CGSizeMake(512, 384)]; 15 NSData *data = UIImagePNGRepresentation(newImage); 16 [data writeToFile:@"lll.png" atomically:YES]; 17 18 CCSprite *tp = [self convertDataToSprite:data]; 19 [self addChild:tp]; 20 [tp setPosition:ccp(512, 384)]; 21 }
這部分使我們對一張圖片紋理進行操作。
接下來我們就對精靈進行放大(縮小)操作,並將處理后的精靈存儲。實現真正意義上的圖片大小的改變。
1 //CCSprite轉換為UIImage 2 - (UIImage *) convertSpriteToImage:(CCSprite *)sprt 3 { 4 CCRenderTexture *render = [CCRenderTexture renderTextureWithWidth:[sprt contentSize].width 5 height:[sprt contentSize].height]; 6 [render begin]; 7 [sprt visit]; 8 [render end]; 9 return [UIImage imageWithData:[render getUIImageAsDataFromBuffer:kCCImageFormatPNG]]; 10 } 11 12 //UIImage放大(縮小)到指定大小 13 - (UIImage *) scaleFromImage:(UIImage *)image toSize:(CGSize)size 14 { 15 UIGraphicsBeginImageContext(size); 16 [image drawInRect:CGRectMake(0, 0, size.width, size.height)]; 17 UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 18 UIGraphicsEndImageContext(); 19 return newImage; 20 } 21 //UIImage轉化為NSData 22 - (NSData *) convertUIImageToData:(UIImage *)image 23 { 24 return UIImagePNGRepresentation(image); 25 }