我偶尔会OutOfMemoryError: (Heap Size=49187KB, Allocated=41957KB)在我的一个应用程序中获得一个.我该怎么做才能诊断出来?
01-09 10:32:02.079: E/dalvikvm(8077): Out of memory: Heap Size=49187KB, Allocated=41957KB, Limit=49152KB
01-09 10:32:02.079: E/dalvikvm(8077): Extra info: Footprint=48611KB, Allowed Footprint=49187KB, Trimmed=7852KB
01-09 10:32:02.079: D/skia(8077): --- decoder->decode returned false
01-09 10:32:02.079: D/AndroidRuntime(8077): Shutting down VM
01-09 10:32:02.079: W/dalvikvm(8077): threadid=1: thread exiting with uncaught exception (group=0x40a97228)
01-09 10:32:02.079: E/AndroidRuntime(8077): FATAL EXCEPTION: main
01-09 10:32:02.079: E/AndroidRuntime(8077): java.lang.OutOfMemoryError: (Heap Size=49187KB, Allocated=41957KB)
01-09 10:32:02.079: E/AndroidRuntime(8077): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
01-09 10:32:02.079: E/AndroidRuntime(8077): at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:486)
01-09 10:32:02.079: E/AndroidRuntime(8077): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:773)
01-09 10:32:02.079: E/AndroidRuntime(8077): …Run Code Online (Sandbox Code Playgroud) 对于某些URL提取,我看到来自via ggpht.com GoogleImageProxy代理的调用次数增加了.详细信息:我在电子邮件html中添加了一个图像.当我打开电子邮件时,我希望可以打电话到我的服务器来获取此图像.但是,由于Gmail使用其代理服务器,我会看到定期拨打多个电话(每张图片大约有500个电话.在一个实例中,我也有一个图像的5000个电话记录).
知道为什么同样的图像被提取了这么多次?
我想从 URL 加载位图,然后使用调色板 API 从中获取一些颜色。
在文档页面,我找不到直接获取位图的代码!
谁能帮我吗?
之前,当我使用win32时,我使用FreeImage来加载和保存比特深度大于8位的位图.这是我合作的每一张图片,因为我正在进行医学成像,在任何人说什么之前,是的,我和我的客户花了很多钱在高亮度,高对比度的显示器上,具有11或12位动态范围.实际上,如果您感到好奇,ACR对运行乳房X线照相术的要求会使显示器的动态范围至少为10位.
我刚刚切换到x64来获取内存开销,并将我的所有开发都集中到一个平台和编译模式上.我宁愿不回到win32,我的客户就在我身边(并且真的强迫改变).FreeImage不能在64位窗口上编译; 它在编译器无法处理的代码中有一个_asm指令.
我以为我会在Microsoft类中尝试本机.NET支持.简而言之:它们不起作用,并且在错误消息非常有限的情况下失败.我怀疑这是因为Microsoft仍然不支持Format16bppGrayScale类.
也许我的代码中存在问题.这是我写的代码:
Bitmap theBitmap = new Bitmap(inImage.XSize, inImage.YSize, PixelFormat.Format16bppGrayScale);
//have to go with lockbits
Rectangle rect = new Rectangle(0, 0, theBitmap.Width, theBitmap.Height);
System.Drawing.Imaging.BitmapData bmpData =
theBitmap.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite,
PixelFormat.Format16bppGrayScale);
IntPtr ptr = bmpData.Scan0;
int theByteSize = theBitmap.Width * theBitmap.Height *2;
byte[] theByteBuffer = new byte[theByteSize];
System.Buffer.BlockCopy(inImage.Data, 0, theByteBuffer, 0, theByteSize);
System.Runtime.InteropServices.Marshal.Copy(theByteBuffer, 0, ptr, theByteSize);
theBitmap.UnlockBits(bmpData);
theBitmap.Save(inDirectory + "\\" + inName);
theBitmap.Dispose();
Run Code Online (Sandbox Code Playgroud)
此代码使程序崩溃
An unhandled exception of type
'System.Runtime.InteropServices.ExternalException' occurred in
System.Drawing.dll
Additional information: A …Run Code Online (Sandbox Code Playgroud) 我有一个用HTML声明的图像:
<img src="images/image_01.gif" id="man_img_file" width="400" height="300" alt="image_01" />
Run Code Online (Sandbox Code Playgroud)
我正在通过jQuery更改图像:
$('#man_img_file').attr('src', "images/image_02.gif");
Run Code Online (Sandbox Code Playgroud)
现在我想在图像加载时显示百分比进度条(即,当新的src图像通过jQuery加载时).怎么能实现这一目标?可以使用jQuery进度条完成吗?
注意:图像已经在服务器中,我可以在加载之前通过PHP脚本获取图像大小.
我正在使用 create-react-app CLI 来构建我的应用程序。我注意到,从 CDN 加载图像比从 src 文件夹中的本地资源文件夹加载图像需要更长的时间。但大家都说 CDN 更快,但我没有注意到。同一张图片通过 CDN 加载需要 200 毫秒,而从本地文件夹加载则需要 4 毫秒。
您认为最好的方法是什么?
image-load ×7
android ×2
jquery ×2
.net ×1
16-bit ×1
64-bit ×1
bitmap ×1
cdn ×1
coil ×1
email ×1
gmail ×1
kotlin ×1
optimization ×1
palette ×1
performance ×1
progress-bar ×1
reactjs ×1