gpt4 book ai didi

java - 尝试在 imageview 中旋转图像时出现 OutOfMemory 错误

转载 作者:太空宇宙 更新时间:2023-11-03 10:22:13 26 4
gpt4 key购买 nike

我试图在 imageView 中旋转图像,并使用相同的图像旋转位图。

(我需要那个位图,因为我稍后会将图像发送到服务器)

代码:

image.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
mPhoto=rotate(mPhoto,90);
image.setImageBitmap(mPhoto);
}
});

旋转()方法:

public static Bitmap rotate(Bitmap src, float degree) {
// create new matrix
Matrix matrix = new Matrix();
// setup rotation degree
matrix.postRotate(degree);
// return new bitmap rotated using matrix
return Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), matrix, true);
}

日志:

08-29 23:14:34.964: W/dalvikvm(20087): threadid=1: thread exiting with uncaught exception (group=0x41505930)
08-29 23:14:34.968: E/AndroidRuntime(20087): FATAL EXCEPTION: main
08-29 23:14:34.968: E/AndroidRuntime(20087): java.lang.OutOfMemoryError
08-29 23:14:34.968: E/AndroidRuntime(20087): at android.graphics.Bitmap.nativeCreate(Native Method)
08-29 23:14:34.968: E/AndroidRuntime(20087): at android.graphics.Bitmap.createBitmap(Bitmap.java:689)
08-29 23:14:34.968: E/AndroidRuntime(20087): at android.graphics.Bitmap.createBitmap(Bitmap.java:666)
08-29 23:14:34.968: E/AndroidRuntime(20087): at android.graphics.Bitmap.createBitmap(Bitmap.java:599)
08-29 23:14:34.968: E/AndroidRuntime(20087): at com.example.free.Add.rotate(Add.java:356)
08-29 23:14:34.968: E/AndroidRuntime(20087): at com.example.free.Add$5.onClick(Add.java:137)
08-29 23:14:34.968: E/AndroidRuntime(20087): at android.view.View.performClick(View.java:4211)
08-29 23:14:34.968: E/AndroidRuntime(20087): at android.view.View$PerformClick.run(View.java:17362)
08-29 23:14:34.968: E/AndroidRuntime(20087): at android.os.Handler.handleCallback(Handler.java:725)
08-29 23:14:34.968: E/AndroidRuntime(20087): at android.os.Handler.dispatchMessage(Handler.java:92)
08-29 23:14:34.968: E/AndroidRuntime(20087): at android.os.Looper.loop(Looper.java:137)
08-29 23:14:34.968: E/AndroidRuntime(20087): at android.app.ActivityThread.main(ActivityThread.java:5227)
08-29 23:14:34.968: E/AndroidRuntime(20087): at java.lang.reflect.Method.invokeNative(Native Method)
08-29 23:14:34.968: E/AndroidRuntime(20087): at java.lang.reflect.Method.invoke(Method.java:511)
08-29 23:14:34.968: E/AndroidRuntime(20087): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
08-29 23:14:34.968: E/AndroidRuntime(20087): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
08-29 23:14:34.968: E/AndroidRuntime(20087): at dalvik.system.NativeStart.main(Native Method)

希望你能帮助我。

是的!

最佳答案

解码文件时试试这个

File imgFile = new File("yourPath");
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 10;
Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath(), options);

然后你打电话

rotate(myBitmap,90);

来自 BitmapFactory.Options文档:

public int inSampleSize

在 API 级别 1 中添加如果设置为 > 1 的值,则请求解码器对原始图像进行子采样,返回较小的图像以节省内存。样本大小是与解码位图中的单个像素相对应的任一维度中的像素数。例如,inSampleSize == 4 返回的图像是原始宽度/高度的 1/4,像素数的 1/16。任何 <= 1 的值都被视为与 1 相同。注意:解码器使用基于 2 的幂的最终值,任何其他值将向下舍入为最接近的 2 的幂。

希望对你有帮助

关于java - 尝试在 imageview 中旋转图像时出现 OutOfMemory 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18520279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com