Tôi đang sử dụng mã sau đây. Hình ảnh được lưu nhưng nó là màu đen.
Vui lòng xem mã của tôi và cho tôi biết nơi tôi đang làm sai.
Tôi đang sử dụng mã này trong Menu.COCOS 2D có màu đen trong Android
case R.id.id_menu_Save:
Bitmap bmp = SavePixels(0, 0, 800, 400, CCDirector.sharedDirector().gl);
File file = new File("/sdcard/test.jpg");
try
{
file.createNewFile();
FileOutputStream fos = new FileOutputStream(file);
bmp.compress(CompressFormat.JPEG, 100, fos);
Toast.makeText(getApplicationContext(), "Image Saved", 0).show();
Log.i("Menu Save Button", "Image saved as JPEG");
}
catch (Exception e)
{
e.printStackTrace();
}
break;
Đây là chức năng Lưu hình ảnh của tôi.
public static Bitmap SavePixels(int x, int y, int w, int h, GL10 gl)
{
int b[]=new int[w*(y+h)];
int bt[]=new int[w*h];
IntBuffer ib=IntBuffer.wrap(b);
ib.position(0);
gl.glReadPixels(x, 0, w, y+h, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, ib);
for(int i=0, k=0; i<h; i++, k++)
{//remember, that OpenGL bitmap is incompatible with Android bitmap
//and so, some correction need.
for(int j=0; j<w; j++)
{
int pix=b[i*w+j];
int pb=(pix>>16)&0xff;
int pr=(pix<<16)&0x00ff0000;
int pix1=(pix&0xff00ff00) | pr | pb;
bt[(h-k-1)*w+j]=pix1;
}
}
Bitmap sb = Bitmap.createBitmap(bt, w, h, Bitmap.Config.ARGB_8888);
return sb;
}
Ngoài ra, điều tôi muốn từ bạn là chỉ cho tôi đúng hướng. Giống như nếu tôi phải lấy các pixel của màn hình, tôi nên khám phá lớp/thực thể nào?
Tôi đã không bao giờ cố gắng để làm điều này, nhưng tôi sẽ giả định các ứng dụng cần một số giấy phép để có thể đọc màn hình. –
gl.glReadPixels (x, 0, w, y + h, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, ib); Dòng này đang đưa ra lỗi ... tôi nên làm gì đây? –