2012-03-12 12 views
6

왜 이것을 사용해야합니까?CCSprite (cocos2d-x)에서 픽셀의 RGB/RGBA 값 가져 오기 및 설정

기본적으로 컬러 이미지를 회색조로 변환해야합니다. 이미지의 그레이 스케일 버전을 포함하면 해결책이 될 수 있지만 내 상황에서는 공간이 부족합니다. APK가 너무 커지는 것을 원하지 않습니다. 게다가, 나는 약간의 효과를 위해 픽셀에 대해서도 연구하고 싶다. 다시 말하지만 APK를 더 작게 만드는 것입니다.

나는 getPixel setPixel from CCTexture2DGetting image's pixel RGBA을 찾았지만 좀 더 간단하게하고 싶습니다.

도움을 주시면 감사하겠습니다.

감사합니다.

답변

7

당신을 위해 내 솔루션입니다 : 스프라이트에서

CCImage *img= new CCImage(); 
img->initWithImageFile("colors.png"); 

II) :

> RenderTexture2D

  • II.2) RenderTexture2D - -

    • II.1) CCSprite> CCImage이 (CCImage *testImage = RenderText2D->newCCImage();)

    2.Then 당신이 할 수있는 당신이 필요 :

    CCImage *img= ... // make CCImage from CCSprite 
        int x=3; 
        if(img->hasAlpha()) 
         x=4; 
    
        unsigned char *data = new unsigned char[img->getDataLen()*x]; 
        data = img->getData(); 
        // [0][0] => Left-Top Pixel ! 
        // But cocos2d Location Y-axis is Bottom(0) to Top(max) 
    
        for(int i=0;i<img->getWidth();i++) 
        { 
         for(int j=0;j<img->getHeight();j++) 
         { 
          unsigned char *pixel = data + (i + j * img->getWidth()) * x; 
    
          // You can see/change pixels' RGBA value(0-255) here ! 
          unsigned char r = *pixel; 
          unsigned char g = *(pixel + 1); 
          unsigned char b = *(pixel + 2) ; 
          unsigned char a = *(pixel + 3); 
         } 
        } 
    

    3. 그런 다음 texture_2D로 변환

    //CCImage -> Texture2d 
        texture_2D= new CCTexture2D(); 
        texture_2D->initWithImage(img); 
    

    4.And 마지막으로 다시 CCSprite

    CCSprite *result= CCSprite::createWithTexture(texture_2D); 
    
  • +0

    char r = * 픽셀을 설정했기 때문에 rgba 값을 볼 수있는 방법을 알고 있습니다. 그러나 픽셀의 값을 어떻게 변경합니까? 나는 당신이 포인터로 무엇을하고 있는지에 대해 약간 혼란 스럽다. 설명 할 수 있니? –

    +1

    @ 존. 거의 비슷합니다. 알다시피, 우리는'pixel' 포인터를 사용하여 각 픽셀의'R' 값에 접근 할 수 있습니다. 이것은 읽기 ('xxx = * 픽셀')와 쓰기 ('* 픽셀 = xxx') 접근입니다. (G에'* (pixel + 1)'사용) – Emadpres

    +0

    * data = new unsigned .....를 수행하여 메모리를 새기고 있지 않다가 다음 라인에서 data = img-> getData()? –

    0

    이것은 두 가지 방법으로 수행 할 수 있습니다. 내가 과거에 해왔 던 것은 스프라이트에서 setColor를 호출하여 찾고자하는 색상에 가까운 색상을 사용하는 것입니다. 그것은 내 목적을 위해 일했다.

    my_sprite.setColor (ccc3 (128, 128, 128));

    (더 철저하고 정확한) 또 다른 방법 : 파일에서

    I) :

    1.First은 이미지의 CCImage 버전을 만들 : 여기 how to implement grayscale rendering in OpenGL?

    +0

    에 나는 setColor를()을 알고 있지만 내가 원하는 것이 아니다. 귀하의 링크에 감사드립니다! –