2014-12-21 75 views
0

給定一個GraphicBufferProducer,我創建一個Surface,然後檢索ANativeWindow。使用ANativeWindow_lock我得到一個指向緩衝區的指針。使用緩衝區,我在緩衝區中執行一個memcpy。問題是,我在這個緩衝區上繪製的任何東西都被限制在少於25%的屏幕上。請記住,buffer.width和buffer.height的尺寸非常接近屏幕本身的分辨率。使用ANativeWindow繪製表面貼圖/表面貼圖

我的問題是,爲什麼緩衝區只覆蓋屏幕的一小部分?我如何確保它覆蓋了大部分(如果不是全部)屏幕?對於參考下面的代碼:

ANativeWindow_Buffer buffer; 
// window is created from a "new Surface(sp<IGraphicBufferProducer>)" 
if (ANativeWindow_lock(window, &buffer, NULL) == 0) { 
    // For testing purposes just put grey in the buffer 
    memcpy(buffer.bits, 0x99, buffer.width * buffer.height); 
    ANativeWindow_unlockAndPost(window); 
} 

回答

1

我有一個猜測,但我從來沒有用過的ANativeWindow_Buffer。 memcpy拷貝一定數量的字節。您的圖像每像素有多少位?如果該值大於8,則不會傳輸完整的緩衝區。由於每像素大概4個字節(AARRGGBB),您可能需要將其乘以4.

+0

您是絕對正確的。我應該乘以4。 –