要想使用opengl es版本为2.0,则必须在AndroidManifest.xml中添加<uses-feature android:glEsVersion="0x00020000" android:required="true" />如果没设,会默认用1.0,然后运行会报API未实现exception.
Bitmap → byte[]
public byte[] Bitmap2Bytes(Bitmap bm) {
ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.PNG, 100, baos); eturn baos.toByteArray(); }
byte[] → Bitmap
public Bitmap Bytes2Bimap(byte[] b) {
if (b.length != 0) { return BitmapFactory.decodeByteArray(b, 0, b.length); } else { return null; } }Bitmap → byte[] :第二种方法
public byte[] Bitamp2Bytes(Bitmap bitmap){
byte[] buffer = new byte[bitmap.getWidth() * bitmap.getHeight() * 3];
for ( int y = 0; y < bitmap.getHeight(); y++ ) for ( int x = 0; x < bitmap.getWidth(); x++ ) { int pixel = bitmap.getPixel(x, y); buffer[(y * bitmap.getWidth() + x) * 3 + 0] = (byte)((pixel >> 16) & 0xFF); buffer[(y * bitmap.getWidth() + x) * 3 + 1] = (byte)((pixel >> 8) & 0xFF); buffer[(y * bitmap.getWidth() + x) * 3 + 2] = (byte)((pixel >> 0) & 0xFF); }return buffer;
}
Render的mode可以设为两种模式,一种是自动循环模式,也就是说GL线程以一 定的时间间隔自动的循环调用用户实现的onDrawFrame()方法进行一帧一帧的绘制,还有一种的“脏”模式,也就是说当用户需要重绘的时候,主动 “拉”这个重绘过程,有点类似于Canvas中的invalidate()
具体的调用方法是在GLSurfaceView中
a.自动模式
setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);
b."脏"模式
.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
当需要重绘时,调用
GLSurfaceView.requestRender()
一般情况下使用脏模式,这样可以有效降低cpu负载。测试结果表明,OpenGL真正绘图时一般会占到30%以上的cp