我正在尝试发送并显示图像文件。我可以显示和编码/解码大约50kb(低于50kb)的图像。但当我尝试发送/编码大于100kb的图像时,我得到了一个错误:“java.lang.OutOfMemoryError”
。
Uri selectedImage = intent.getData();
String filePath=MediaOperations.getPath(getApplicationContext(), selectedImage);
if (bmp != null && !bmp.isRecycled()) {
bmp = null;
}
bmp = BitmapFactory.decodeFile(filePath);
我使用这些代码获取文件路径
我将位图转换为字节数组,将字节数组转换为base64string。我用socketio将basese64string发送到服务器。我在ImageView中显示位图。但当文件大于50kb时,base64编码和imageview不起作用。我怎样才能解决这个问题
我尝试了android:largeHeap=“true”但没有解决我的问题
提前感谢
UDATE
位图到字节数组:
public static byte[] getBytes(Bitmap bitmap) {
try {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 0, stream);
return stream.toByteArray();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
} }
字节数组到base 64String:
public static String getBase64(byte[] array){
try {
return Base64.encodeToString(array, Base64.DEFAULT);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
} }
更新2:
Window is full: requested allocation 15120804 bytes, free space 2096642 bytes, window size 2097152 bytes <br></br>
java.lang.IllegalStateException: Couldn't read row 0, col 0 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
错误日志:
03-21 11:47:24.116: E/dalvikvm-heap(2084): Out of memory on a 30241618-byte allocation.
03-21 11:47:24.120: I/dalvikvm(2084): "main" prio=5 tid=1 RUNNABLE
03-21 11:47:24.124: I/dalvikvm(2084): | group="main" sCount=0 dsCount=0 obj=0xa4bca480 self=0xb8a84bd0
03-21 11:47:24.128: I/dalvikvm(2084): | sysTid=2084 nice=0 sched=0/0 cgrp=[fopen-error:2] handle=-1216913376
03-21 11:47:24.132: I/dalvikvm(2084): | state=R schedstat=( 9832259071 3939135544 5574 ) utm=726 stm=256 core=0
03-21 11:47:24.136: I/dalvikvm(2084): at java.lang.String.<init>(String.java:~365)
03-21 11:47:24.140: I/dalvikvm(2084): at java.lang.String.<init>(String.java:228)
03-21 11:47:24.144: I/dalvikvm(2084): at android.util.Base64.encodeToString(Base64.java:456)
我解决了这个问题,但我有图像质量问题。使质量下降。当以原始大小显示图像时,
图像模糊
。我希望有人能在这方面提供帮助。。
public static Bitmap lessResolution(String filePath) {
int reqHeight = 120;
int reqWidth = 120;
BitmapFactory.Options options = new BitmapFactory.Options();
// First decode with inJustDecodeBounds=true to check dimensions
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePath, options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, reqWidth,
reqHeight);
// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;
return BitmapFactory.decodeFile(filePath, options);
}
private static int calculateInSampleSize(BitmapFactory.Options options,
int reqWidth, int reqHeight) {
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) {
// Calculate ratios of height and width to requested height and
// width
final int heightRatio = Math.round((float) height
/ (float) reqHeight);
final int widthRatio = Math.round((float) width / (float) reqWidth);
// Choose the smallest ratio as inSampleSize value, this will
// guarantee
// a final image with both dimensions larger than or equal to the
// requested height and width.
inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
}
return inSampleSize;
}
-
我已经开发了一个应用程序,应该显示位于可绘制文件夹中的图像。我使用了Imageview/viewpager。但是,我想显示下面显示的框架。在图像的顶部,这样图像看起来更花哨...此外,框架应该随着图像滑动...这样它看起来更漂亮...我正在考虑在图像上永久创建它...通过Photoshop...但我不喜欢这个想法...所以我想可能是android有一些东西...我是android初学者...所以任
因此,在Android的ImageView中显示图像非常简单。我从图库中挑选了一张图片,保存了它到数据库的链接,然后尝试在ImageView中显示它。 我也尝试了这个小的图像不是由相机拍摄的,这是工作的。但每次我选择用手机相机拍摄的图像时,都会有一个错误: 那么,在超过300万像素的相机中,如何在我的ImageView中显示图像呢?
我想在GitHub上的一个Markdown文件中显示一些图像。我发现它是这样工作的: 它可以在我的本地磁盘上工作,但不能在GitHub上工作。 有人知道这个问题吗?
我想在JavaFX的ImageView中显示图像。图像应该从SQLite数据库中获取,并在场景加载时显示。我使用以下代码片段从数据库获取代码,并在之前创建的ImageView中显示它。但是图像没有按预期显示。我做错了吗?P. S.我测试了改变路径在两个和当读取文件从目录到。但似乎没有什么奏效。但是当我手动将一个图像文件放在src目录中并尝试读取它时,它就像一个魅力。但是我想展示一张从数据库中提取的
我写了一个代码,我在GridView中显示图像,但现在我想在每个图像的底部显示文本。 我想这样展示我的网格: 但是像这样[还想为图像显示文本]: main.xml: