作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Intent localIntent = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
File dir = Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
random = new Random();
seqNo = random.nextInt(1000000);
photoName = String.valueOf(seqNo);
output = new File(dir, photoName + ".jpeg");
imgPath = Uri.fromFile(output);
localIntent.putExtra(MediaStore.EXTRA_OUTPUT, imgPath);
path = output.getAbsolutePath();
startActivityForResult(localIntent, PICK_Camera_IMAGE);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode== PICK_Camera_IMAGE && resultCode == RESULT_OK) {
try {
File f = new File(path);
Matrix mat = new Matrix();
mat.postRotate(90);
//
Bitmap bmp = BitmapFactory.decodeStream(new FileInputStream(f), null, null);
Bitmap bmpPic = Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), mat, true);
注意:我使用此代码使用相机拍照。它在除 samsung galaxy s3 之外的所有设备中运行。当我在 s3 上运行时,它会出现类似 OutOfMemoryError 的错误。
日志:
04-27 11:26:49.775: E/AndroidRuntime(6356): java.lang.OutOfMemoryError
04-27 11:26:49.775: E/AndroidRuntime(6356): at android.graphics.Bitmap.nativeCreate(Native Method)
04-27 11:26:49.775: E/AndroidRuntime(6356): at android.graphics.Bitmap.createBitmap(Bitmap.java:640)
04-27 11:26:49.775: E/AndroidRuntime(6356): at android.graphics.Bitmap.createBitmap(Bitmap.java:586)
04-27 11:26:49.775: E/AndroidRuntime(6356): at com.example.camera.CameraAct$10$1.run(CameraAct.java:378)
04-27 11:26:49.775: E/AndroidRuntime(6356): at android.os.Handler.handleCallback(Handler.java:615)
04-27 11:26:49.775: E/AndroidRuntime(6356): at android.os.Handler.dispatchMessage(Handler.java:92)
04-27 11:26:49.775: E/AndroidRuntime(6356): at android.os.Looper.loop(Looper.java:137)
04-27 11:26:49.775: E/AndroidRuntime(6356): at android.app.ActivityThread.main(ActivityThread.java:4898)
04-27 11:26:49.775: E/AndroidRuntime(6356): at java.lang.reflect.Method.invokeNative(Native Method)
04-27 11:26:49.775: E/AndroidRuntime(6356): at java.lang.reflect.Method.invoke(Method.java:511)
04-27 11:26:49.775: E/AndroidRuntime(6356): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
最佳答案
您需要在使用前减少位图的样本大小。这可用于执行此操作。
private Bitmap decodeFile(File file)
{
try
{
//********************* decode image size ********************
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(new FileInputStream(file), null, options);
// ********************** Find the correct scale value. It should be the power of 2. ********************
options.inSampleSize = BitmapConverter.calculateInSampleSize(options, 145, 105);
options.inJustDecodeBounds = false;
return BitmapFactory.decodeStream(new FileInputStream(file), null, options);
}
catch(FileNotFoundException eFileNotFoundException)
{
return null;
}
}
然后你可以在需要时调用 Bitmap.recycle(),尽管我觉得没有必要。
关于android - 星系 s3 中的 OutOfMemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16248855/
Intent localIntent = new Intent( android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
有没有人在将 galaxy 升级到 android 2.3.3 后经历过深度排序行为的变化? 我发现一旦达到某个多边形计数阈值,深度排序就无法工作。 在 2.2 上运行良好的场景现在无法排序。 有人知
我是一名优秀的程序员,十分优秀!