2012-11-28 66 views
0

我使用Android NDK爲單個像素設置顏色。它看起來就像這樣:位圖處理後損壞的顏色

typedef struct { 
    uint8_t red; 
    uint8_t green; 
    uint8_t blue; 
    uint8_t alpha; 
} rgba; 

JNIEXPORT void JNICALL Java_com_package_jniBmpTest(JNIEnv* env, jobject obj, jobject bitmapIn, jobject bitmapOut) { 
    AndroidBitmapInfo infoIn; 
    void*    pixelsIn; 
    AndroidBitmapInfo infoOut; 
    void*    pixelsOut; 

    if ((ret = AndroidBitmap_getInfo(env, bitmapIn, &infoIn)) < 0 || 
     (ret = AndroidBitmap_getInfo(env, bitmapOut, &infoOut)) < 0) { 
     return; 
    } 

    if (infoIn.format != ANDROID_BITMAP_FORMAT_RGBA_8888 || 
     infoOut.format != ANDROID_BITMAP_FORMAT_RGBA_8888) { 
     return; 
    } 

    if ((ret = AndroidBitmap_lockPixels(env, bitmapIn, &pixelsIn)) < 0 || 
     (ret = AndroidBitmap_lockPixels(env, bitmapOut, &pixelsOut)) < 0) { 
     LOGE("Error! %d", ret); 
    } 

    rgba* input = (rgba*) pixelsIn; 
    rgba* output = (rgba*) pixelsOut; 
    int w = infoIn.width; 
    int h = infoIn.height; 

    int n; 
    for (n = 0; y < w * h; n++) { 
     output[n].red = input[n].red; 
     output[n].green = input[n].green; 
     output[n].blue = input[n].blue; 
     output[n].alpha = 127; 
    } 

    AndroidBitmap_unlockPixels(env, bitmapIn); 
    AndroidBitmap_unlockPixels(env, bitmapOut); 
} 

我需要設置位圖半透明的(這是簡化的例子 - 我的代碼要複雜得多,但在錯誤的代碼存在,太)。 問題是,由於我的圖像顏色被破壞,而不是半透明的位圖。它也是半透明的,但顏色不正確(例如,白色是黑色,藍色是綠色......)。什麼是可能的問題?

感謝您的幫助。

回答

0

修正了它。對不起,問的問題,五分鐘後回答吧:)

解決方案是這樣的:

float alpha; 
alpha = 0.5; 
output[n].red = (int) (input[n].red * alpha); 
output[n].green = (int) (input[n].green * alpha); 
output[n].blue = (int) (input[n].blue * alpha); 
output[n].alpha = (int) (255 * alpha);