【发布时间】:2023-03-26 05:39:01
【问题描述】:
我正在尝试将图像转换为位图,然后将其编码为 base64 字符串。我在行上遇到空指针异常
bMap.compress(Bitmap.CompressFormat.PNG, COMPRESSION_QUALITY,
byteArrayBitmapStream);
怎么了?请注意,我将带有图片“pic2.jpg”的文件名输入到下面的方法中。
下面是我的代码:
private String convertToBitmap (String name){
File imgFile = new File (name);
Bitmap bMap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
final int COMPRESSION_QUALITY = 100;
String encodedImage;
ByteArrayOutputStream byteArrayBitmapStream = new ByteArrayOutputStream();
bMap.compress(Bitmap.CompressFormat.PNG, COMPRESSION_QUALITY,
byteArrayBitmapStream);
byte[] b = byteArrayBitmapStream.toByteArray();
encodedImage = Base64.encodeToString(b, Base64.DEFAULT);
return encodedImage;
}
在我的日志猫下面:
03-22 23:03:44.916 18331-18331/? I/art: Not late-enabling -Xcheck:jni (already on)
03-22 23:03:44.916 18331-18331/? W/art: Unexpected CPU variant for X86 using defaults: x86
03-22 23:03:45.029 18331-18331/com.example.reynaldo.getimageserver W/System: ClassLoader referenced unknown path: /data/app/com.example.reynaldo.getimageserver-2/lib/x86
03-22 23:03:45.038 18331-18331/com.example.reynaldo.getimageserver I/InstantRun: Instant Run Runtime started. Android package is com.example.reynaldo.getimageserver, real application class is null.
03-22 23:03:45.124 18331-18331/com.example.reynaldo.getimageserver W/System: ClassLoader referenced unknown path: /data/app/com.example.reynaldo.getimageserver-2/lib/x86
03-22 23:03:45.372 18331-18331/com.example.reynaldo.getimageserver W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
03-22 23:03:45.676 18331-18361/com.example.reynaldo.getimageserver D/NetworkSecurityConfig: No Network Security Config specified, using platform default
03-22 23:03:45.865 18331-18367/com.example.reynaldo.getimageserver I/OpenGLRenderer: Initialized EGL, version 1.4
03-22 23:03:45.865 18331-18367/com.example.reynaldo.getimageserver D/OpenGLRenderer: Swap behavior 1
03-22 23:03:45.908 18331-18367/com.example.reynaldo.getimageserver E/EGL_emulation: tid 18367: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH)
03-22 23:03:45.909 18331-18367/com.example.reynaldo.getimageserver W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xb493fe00, error=EGL_BAD_MATCH
【问题讨论】:
-
I'm getting a null pointer exception on the line你的意思是bMap是空的吗? -
我相信是的,我认为我使用的文件路径不正确。但是我从终端得到了文件路径,放到方法里面还是不行。
-
可能文件太大了。检查这个答案:stackoverflow.com/a/8442683/5241603
-
我已将日志猫添加到帖子中
-
@Geek96 是的,一定要确定路径,因为如果指定的文件名是空的,或者不能解码成位图,函数返回空,检查docs。使用
try catch并打印日志
标签: android image encoding bitmap