package com.fpt.screenplayer.two;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.PixelFormat;
import android.hardware.display.DisplayManager;
import android.hardware.display.VirtualDisplay;
import android.media.Image;
import android.media.ImageReader;
import android.media.projection.MediaProjection;
import android.media.projection.MediaProjectionManager;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.DisplayMetrics;
import android.view.Display;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import com.fpt.screenplayer.R;
import java.nio.ByteBuffer;
public class SecondScreenImageActivity extends Activity{
private Button btn;
private ImageView imageView;
private MediaProjection mediaProjection;
private VirtualDisplay virtualDisplay;
private MediaProjectionManager projectionManager;
final static int REQUESTRESULT = 0x100;
private int mWidth;
private int mHeight;
private int mScreenDensity;
private ImageReader mImageReader;
private LinearLayout ll;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initView();
initData();
}
private void initView() {
btn=findViewById(R.id.main_btn);
ll=findViewById(R.id.ll);
imageView=findViewById(R.id.main_img);
}
public void initData(){
projectionManager = (MediaProjectionManager) getSystemService(MEDIA_PROJECTION_SERVICE);
Display display = getWindowManager().getDefaultDisplay();
mWidth = display.getWidth();
mHeight = display.getHeight();
DisplayMetrics outMetric = new DisplayMetrics();
display.getMetrics(outMetric);
mScreenDensity = (int) outMetric.density;
Intent intent = new Intent(projectionManager.createScreenCaptureIntent());
startActivityForResult(intent,REQUESTRESULT);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Image image = mImageReader.acquireLatestImage();
int width = image.getWidth();
int height = image.getHeight();
final 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();
imageView.setImageBitmap(bitmap);
ll.setBackgroundColor(0x0f0);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
mImageReader = ImageReader.newInstance(mWidth,mHeight, PixelFormat.RGBA_8888, 2);
mediaProjection = projectionManager.getMediaProjection(resultCode,data);
virtualDisplay = mediaProjection.createVirtualDisplay("mediaprojection",mWidth,mHeight,
mScreenDensity, DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,mImageReader.getSurface(),null,null);
}
}
}
效果如下: