cocos2d+uikit常用函数

来源:互联网 发布:克里斯保罗16年数据 编辑:程序博客网 时间:2024/06/06 20:15
coocs2d to uikit
- (UIImage*) convertSpriteToImage:(CCSprite*)sprite
{
    CGPoint p = sprite.anchorPoint;
    [sprite setAnchorPoint:ccp(0,0)];
    
    CCRenderTexture *renderer = [CCRenderTexture 
                                 renderTextureWithWidth:sprite.contentSize.width height:sprite.contentSize.height];
    [renderer begin];
    [sprite visit];
    [renderer end];
    
    [sprite setAnchorPoint:p];
    return [renderer getUIImageFromBuffer];
}

// uikit to cocos2d
- (CCSprite*) convertImageToSprite:(UIImage*)image
{
    CCTexture2D* texture =  [[CCTexture2D alloc] initWithImage:image];
    CCSprite* sprite = [CCSprite spriteWithTexture:texture];
    SAFE_RELEASE(texture);
    return sprite;
}

// 灰度
- (UIImage*) convertToGreyscale:(UIImage*)image
{
    int kRed = 1;  
    int kGreen = 2;  
    int kBlue = 4;  
    int colors = kGreen;  
    int m_width = image.size.width;  
    int m_height = image.size.height;  
    uint32_t *rgbImage = (uint32_t *) malloc(m_width * m_height * sizeof(uint32_t));  
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();  
    CGContextRef context = CGBitmapContextCreate(rgbImage, m_width, m_height, 8, m_width * 4, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipLast);  
    CGContextSetInterpolationQuality(context, kCGInterpolationHigh);  
    CGContextSetShouldAntialias(context, NO);  
    CGContextDrawImage(context, CGRectMake(0, 0, m_width, m_height), [image CGImage]);  
    CGContextRelease(context);  
    CGColorSpaceRelease(colorSpace);  
    // now convert to grayscale  
    uint8_t *m_imageData = (uint8_t *) malloc(m_width * m_height);  
    for(int y = 0; y < m_height; y++) 
    {  
        for(int x = 0; x < m_width; x++) 
        {  
            uint32_t rgbPixel=rgbImage[y*m_width+x];  
            uint32_t sum=0,count=0;  
            if (colors & kRed) {sum += (rgbPixel>>24)&255; count++;}  
            if (colors & kGreen) {sum += (rgbPixel>>16)&255; count++;}  
            if (colors & kBlue) {sum += (rgbPixel>>8)&255; count++;}  
            m_imageData[y*m_width+x]=sum/count;  
        }  
    }  
    free(rgbImage);  
    // convert from a gray scale image back into a UIImage  
    uint8_t *result = (uint8_t *) calloc(m_width * m_height *sizeof(uint32_t), 1);  
    // process the image back to rgb  
    for(int i = 0; i < m_height * m_width; i++) 
    {  
        result[i*4]=0;  
        int val=m_imageData[i];  
        result[i*4+1]=val;  
        result[i*4+2]=val;  
        result[i*4+3]=val;  
    }  
    // create a UIImage  
    colorSpace = CGColorSpaceCreateDeviceRGB();  
    context = CGBitmapContextCreate(result, m_width, m_height, 8, m_width * sizeof(uint32_t), colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipLast);  
    CGImageRef imageRef = CGBitmapContextCreateImage(context);  
    CGContextRelease(context);  
    CGColorSpaceRelease(colorSpace);  
    UIImage *resultUIImage = [UIImage imageWithCGImage:imageRef];  
    CGImageRelease(imageRef);  
    // make sure the data will be released by giving it to an autoreleased NSData  
    [NSData dataWithBytesNoCopy:result length:m_width * m_height];  
    return resultUIImage;  
}

//  缩放图片
- (UIImage*) scaleToSize:(UIImage*)img size:(CGSize)size
{
    UIGraphicsBeginImageContext(size);  
    [img drawInRect:CGRectMake(0, 0, size.width, size.height)];  
    UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();  
    UIGraphicsEndImageContext();  
    return scaledImage;  
}

// md5编码
- (NSString*) convertToMd5:(NSString*)source
{
    const char *cStr = [source UTF8String];
    unsigned char result[16];
    CC_MD5(cStr,strlen(cStr),result);
    return [NSString stringWithFormat:
            @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
            result[0] , result[1] , result[2] , result[3] ,
            result[4] , result[5] , result[6] , result[7] ,
            result[8] , result[9] , result[10], result[11],
            result[12], result[13], result[14], result[15]
            ];
}

// 得到系统首选语言
- (NSString*) getDefaultLanguage
{
    NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
    NSArray* languages = [defs objectForKey:@"AppleLanguages"];
    NSString* preferredLang = [languages objectAtIndex:0];
    return preferredLang;
}

// cocos2d得到当前屏幕buffer
- (UIImage*) getScreenshot
{
    CCDirector* director = [CCDirector sharedDirector];
    CGSize size = director.displaySize;
    
    //Create buffer for pixels
    GLuint bufferLength = size.width * size.height * 4;
    GLubyte* buffer = (GLubyte*)malloc(bufferLength);
    
    //Read Pixels from OpenGL
    glReadPixels(0, 0, size.width, size.height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
    
    //Make data provider with data.
    CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, buffer, bufferLength, NULL);
    
    //Configure image
    int bitsPerComponent = 8;
    int bitsPerPixel = 32;
    int bytesPerRow = 4 * size.width;
    CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();
    CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault;
    CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault;
    CGImageRef iref = CGImageCreate(size.width, size.height, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent);
    CGColorSpaceRelease(colorSpaceRef);
    
    uint32_t* pixels = (uint32_t*)malloc(bufferLength);
    CGContextRef context = CGBitmapContextCreate(pixels, [director winSize].width, [director winSize].height, 8, [director winSize].width * 4, CGImageGetColorSpace(iref), kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
    
    CGContextTranslateCTM(context, 0, size.height);
    CGContextScaleCTM(context, 1.0f, -1.0f);
    
    switch (director.deviceOrientation)
    {
        case CCDeviceOrientationPortrait:
        case CCDeviceOrientationPortraitUpsideDown:
            CGContextRotateCTM(context, CC_DEGREES_TO_RADIANS(180));
            CGContextTranslateCTM(context, -size.width, -size.height);
            break;
        case CCDeviceOrientationLandscapeLeft:
            CGContextRotateCTM(context, CC_DEGREES_TO_RADIANS(-90));
            CGContextTranslateCTM(context, -size.height, 0);
            break;
        case CCDeviceOrientationLandscapeRight:
            CGContextRotateCTM(context, CC_DEGREES_TO_RADIANS(90));
            CGContextTranslateCTM(context, size.width * 0.5f, -size.height);
            break;
    }
    
    CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, size.width, size.height), iref);
    CGImageRef imageRef = CGBitmapContextCreateImage(context);
    UIImage *outputImage = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);
    
    //Dealloc
    CGDataProviderRelease(provider);
    CGImageRelease(iref);
    CGContextRelease(context);
    free(buffer);
    free(pixels);
    
    return outputImage;
}

// 震动
- (void) sendShock
{
    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
}

// 判断是否越狱
- (BOOL)isJailbroken 
{  
    BOOL jailbroken = NO;  
    NSString *cydiaPath = @"/Applications/Cydia.app";  
    NSString *aptPath = @"/private/var/lib/apt/";  
    if ([[NSFileManager defaultManager] fileExistsAtPath:cydiaPath]) 
    {  
        jailbroken = YES;  
    }  
    if ([[NSFileManager defaultManager] fileExistsAtPath:aptPath]) 
    {  
        jailbroken = YES;  
    }  
    return jailbroken;  
}
原创粉丝点击