截图空指针。

tableter 2018-11-30 11:23:24
import android.app.*; import android.os.*; import android.graphics.*; import java.io.*; import android.content.*; import android.media.projection.*; import android.hardware.display.*; import android.media.*; import android.content.res.*; import java.nio.*; import android.view.*; public class ScreenCaptureActivity extends Activity { private int[] viewPos; @Override protected void onCreate(Bundle savedInstanceState) { Intent intent = getIntent(); viewPos = intent.getIntArrayExtra("viewpos"); super.onCreate(savedInstanceState); startActivityForResult(((MediaProjectionManager) getSystemService("media_projection")).createScreenCaptureIntent(),1); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO: Implement this method super.onActivityResult(requestCode, resultCode, data); if(1==requestCode) if (resultCode == -1 && data != null) { parseData(data); } } private void parseData(Intent data){ MediaProjectionManager mpm = (MediaProjectionManager)getSystemService(Context.MEDIA_PROJECTION_SERVICE); MediaProjection mMediaProjection = mpm.getMediaProjection(Activity.RESULT_OK,data); WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE); int width = wm.getDefaultDisplay().getWidth(); int height = wm.getDefaultDisplay().getHeight(); final ImageReader mImageReader = ImageReader.newInstance(width,height,PixelFormat.RGBA_8888,1); VirtualDisplay mVirtualDisplay = mMediaProjection.createVirtualDisplay( "screen-mirror", width, height, Resources.getSystem().getDisplayMetrics().densityDpi, DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, mImageReader.getSurface(), null, null ); Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { try{ SystemClock.sleep(1000); Image image = mImageReader.acquireLatestImage(); int width = image.getWidth(); int height = image.getHeight(); Image.Plane[] planes = image.getPlanes(); final ByteBuffer buffer = planes[0].getBuffer(); int pixelStride = planes[0].getPixelStride(); int rowStride = planes[0].getRowStride(); int rowPadding = rowStride - pixelStride * width; Bitmap bitmap = Bitmap.createBitmap(width + rowPadding / pixelStride, height, Bitmap.Config.ARGB_8888); bitmap.copyPixelsFromBuffer(buffer); bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height); image.close(); File imagefile = new File(MessageReceiveService.WORK_PATH+"tmp.png"); if(!imagefile.exists()) imagefile.createNewFile(); FileOutputStream fos = new FileOutputStream(imagefile); bitmap = Bitmap.createBitmap(bitmap,viewPos[0],viewPos[1],viewPos[2]-viewPos[0],viewPos[3]-viewPos[1]); bitmap.compress(Bitmap.CompressFormat.PNG,100,fos); fos.flush(); fos.close(); }catch(Exception e){ MessageReceiveService.Log(e.toString()); } } }, 300); mVirtualDisplay.release(); mVirtualDisplay = null; } }
...全文
214 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
tableter 2018-11-30
  • 打赏
  • 举报
回复
Image image = mImageReader.acquireLatestImage()这句老是错误,请指教。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧