我正在使用Android ImageReader类从MediaProjection.createVirtualDisplay方法接收位图.
到目前为止,我的代码如下所示:
mProjection.createVirtualDisplay("test", width, height, density, flags, mImageReader.getSurface(), new VirtualDisplayCallback(), mHandler);
mImageReader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
Image image = null;
try {
image = mImageReader.acquireLatestImage();
final Image.Plane[] planes = image.getPlanes();
final ByteBuffer buffer = planes[0].getBuffer();
final byte[] data = new byte[buffer.capacity()];
buffer.get(data);
final Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
if (bitmap==null)
Log.e(TAG, "bitmap is null");
} catch (Exception e) {
if (image!=null)
image.close();
}
}
}, mHandler);
Run Code Online (Sandbox Code Playgroud)
问题是BitmapFactory无法将data []解码回Bitmap,即BitmapFactory总是返回null.我从logcat看到的唯一消息来自android_media_ImageReader.cpp,如下所示:
D/ImageReader_JNI(1432): ImageReader_imageSetup: Receiving JPEG …
Run Code Online (Sandbox Code Playgroud) 我想知道是否可以在gradle.build ndk {}块中定义LOCAL_SRC_FILES.
我目前正在使用:
dependencies {
classpath 'com.android.tools.build:gradle:1.3.0'
}
Run Code Online (Sandbox Code Playgroud)
在我的顶级gradle.build文件中.
我的jni模块gradle.build文件如下所示:
apply plugin: 'com.android.library'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
}
android {
compileSdkVersion 11
buildToolsVersion "22.0.1"
def jniSrc = System.getProperty("user.home") + "/srcs/jni"
defaultConfig {
ndk {
moduleName "core"
stl "gnustl_shared"
cFlags "-std=c++11"
}
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
jniLibs.srcDirs = ['libs']
jni.srcDirs = ["${jniSrc}"]
}
}
buildTypes { …
Run Code Online (Sandbox Code Playgroud)