2011-09-13 69 views
1
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.background); 

我background.png的大小512x512px的Android的OpenGL:Bitmap.getHeight()>實際高度

我使用BitmapFactory加載背景資源文件的位圖。

的斯特朗的事情:

Log.d("bitmap height", bmp.getHeight() + "px"); 

總是返回768px。

這怎麼可能?

我的OpenGL是設置這樣的:

width = 480; 
height = 800; 
gl.glViewport(0, 0, width, height); 
gl.glMatrixMode(GL10.GL_PROJECTION); 
gl.glLoadIdentity(); 
gl.glOrthof(0.0f, width, 0.0f, height, -1.0f, 1.0f); 

gl.glShadeModel(GL10.GL_FLAT); 
gl.glEnable(GL10.GL_BLEND); 
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); 
gl.glColor4x(0x10000, 0x10000, 0x10000, 0x10000); 
gl.glEnable(GL10.GL_TEXTURE_2D); 


gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST); 
gl.glClearColor(0.5f, 0.5f, 0.5f, 1); 
gl.glDisable(GL10.GL_DEPTH_TEST); 
gl.glDisable(GL10.GL_DITHER); 
gl.glDisable(GL10.GL_LIGHTING); 
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 

回答

2

當位圖的DPI與屏幕的DPI不匹配時,BitmapFactory將縮放位圖。解決方法是將inScaled選項設置爲false:

BitmapFactory.Options opts = new BitmapFactory.Options(); 
opts.inScaled = false; 
Bitmap bmp = BitmapFactory.decodeResource(getResources(), 
    R.drawable.background, opts); 
2

512分之768= 1.5 這是用於您的屏幕分辨率的因素。

+0

我可以更改此因子嗎?還是必須呈現所有更小尺寸的精靈?這個因素來自哪裏? –

+0

我想你會問,因爲你的背景超過了屏幕邊界。在我的應用程序中,我使用android:scaleType =「fitXY」作爲背景ImageView,並且忘記了png的尺寸。這有用嗎? – Zappescu

+0

不,不是。我的「背景」是一個「正常」的精靈。我在背景或其他圖像精靈之間沒有任何區別。我使用OpenGL來繪製這些精靈,所以我不能做任何設置像「scaleType」或每一個:/ –

相關問題