2012-03-01 64 views
0

我已經寫了一些代碼,需要一個UIImage.CGImageRef並將其放入上下文,以便我可以分析它。這一切都很好。但是,我現在希望在Cocos2D應用程序中實現這個過程。從CCSprite,CCTexture2D或者直接從CCSpriteFrameCache獲取CGImageRef?

我的應用程序的所有圖形都是使用Texture Packer作爲精靈表完成的,所以我正在尋找任何方法從精靈表中獲取我需要的CGImageRef。

我的理論是你可以用CGImageRef初始化一個CCSprite,那麼爲什麼我不能簡單地將它重新取出來呢?

也許我錯過了一些簡單的事情Cocos2D有一個CGImageRef等價物嗎?

回答

1

你可以嘗試水木清華這樣

CCRenderTexture *renderer = [CCRenderTexture renderTextureWithWidth:size.width height:size.height]; 
    [renderer begin]; 

    CCSpriteBatchNode *spriteSheet = [m_sprite batchNode]; 
    if (spriteSheet != nil) 
     [spriteSheet visit]; 
    else 
     [m_sprite visit]; 

    [renderer end]; 

    NSData* uidata = [renderer getUIImageAsDataFromBuffer:kCCTexture2DPixelFormat_RGBA8888]; 
    UIImage* uiimage = [UIImage imageWithData:uidata]; 

    CGImageRef image = [uiimage CGImage]; 
+0

我做閱讀 ccspriteframe直銷像這樣的聲音,但我似乎無法得到它的工作。這可能是我設置精靈表的方式?我正在使用CCSpriteBatchNode * spriteSheet = [CCSpriteBatchNode batchNodeWithFile:@「sheet.pvr.ccz」]; – EcksMedia 2012-03-03 03:34:20

0

您可以通過glReadPixels從OpenGL獲取圖像數據。它需要一些調整,但這在性能方面是錯誤的解決方案。 OpenGL被設計爲單向傳送器(您傳遞數據並且不讀回它)。根據您的具體任務,您可以在從文件加載紋理時預加載圖像數據。

作爲示例,我們使用每像素觸摸測試的alpha通道紋理。所以,當我們加載圖像時,我們在內存中存儲alpha閾值的位掩碼。

0

沒有 cctexture從[CCTextureCache sharedTextureCache]從照片文件讀取[CCSpriteFrameCache sharedSpriteFrameCache]從 「的.plist」 文件