我在图像读取器外部收到字节数组null,但在图像读取器内部也可以。为什么我不会在图像读取器之外获取字节数组?我通过异步任务类中的套接字发送了一个字节数组,但它获取了一个空数组。如果在Image Available方法上捕获了屏幕,则我得到了图像字节,因此我将字节保存到bytes数组变量中,但我不会在字节数组之外得到它,而在监听器中却为null,我不会发送字节,因为我使用异步任务类。 注意:此方法在异步任务类中调用
public byte [] byteArray = null;
public void createImageReader()
{
if(Build.VERSION.SDK_INT >= 21) {
Log.d("strrun","Load CreateImageRead");
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
metrics = new DisplayMetrics();
display.getMetrics(metrics);
Point size = new Point();
display.getRealSize(size);
final int mWidth = size.x;
final int mHeight = size.y;
int mDensity = metrics.densityDpi;
mImageReader = ImageReader.newInstance(mWidth,mHeight,PixelFormat.RGBA_8888,2);
handler = new Handler(Looper.getMainLooper());
int flags = DisplayManager.VIRTUAL_DISPLAY_flaG_OWN_CONTENT_ONLY | DisplayManager.VIRTUAL_DISPLAY_flaG_PUBLIC;
Mainactivity.mProjection.createVirtualDisplay("screen-mirror",mWidth,mDensity,flags,mImageReader.getSurface(),null,handler);
Log.d("strrun","Load CreateImageRead 2");
try {
mImageReader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
reader.setOnImageAvailableListener(null,handler);
Image image = reader.acquireLatestImage();
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 * metrics.widthPixels;
// create bitmap
Bitmap bmp = Bitmap.createBitmap(metrics.widthPixels + (int) ((float) rowPadding / (float) pixelStride),metrics.heightPixels,Bitmap.Config.ARGB_8888);
bmp.copypixelsFromBuffer(buffer);
image.close();
reader.close();
Bitmap realSizeBitmap = Bitmap.createBitmap(bmp,metrics.widthPixels,bmp.getHeight());
bmp.recycle();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
realSizeBitmap.compress(Bitmap.CompressFormat.JPEG,100,stream);
byteArray = stream.toByteArray();
try {
stream.close();
} catch (IOException e) {
e.printStackTrace();
}
Log.d("Receive","Length : "+byteArray.length);
/* do something with [realSizeBitmap] */
}
},handler);
}catch (Exception e)
{
Log.d("strrun",e.getMessage());
e.printStackTrace();
}
//Byte Array null why?
Log.d("Receive","Length : "+byteArray.length);
// sentScreenShot();
}
}//createImageReader