当前位置: 首页 > 面试题库 >

Android发布高分辨率图像耗尽内存

伍耀
2023-03-14
问题内容

各位开发人员,大家好。

我正忙于android从应用程序上传图像。
我也可以使用它(代码将在下面)。
但是,当我发送大图像(10兆像素)时,我的应用程序因内存不足异常而崩溃。
一个解决方案是使用压缩,但是如果我要发送完整尺寸的图像怎么办?
我想也许有些东西在溪流中,但我不喜欢溪流。也许urlconnection可能有帮助,但我真的不知道。

我给文件名命名为File [0到9999] .jpg具有图像日期的发布值称为Filedata我为发布值dropboxid提供一个UID

下面的代码有效,但是我很想解决我的问题,该问题使我无法发送高分辨率图像。

亲切的问候

try
{
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    bitmap.compress(CompressFormat.JPEG, 100, bos);
    byte[] data = bos.toByteArray();

    HttpPost postRequest = new HttpPost(URL_SEND);

    ByteArrayBody bab = new ByteArrayBody(data, "File" + pad(random.nextInt(9999) + 1) + ".jpg");
    MultipartEntity reqEntity = new multipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
    reqEntity.addPart("Filedata", bab);
    reqEntity.addPart("dropboxId", new StringBody(URLEncoder.encode(uid)));
    postRequest.setEntity(reqEntity);

    HttpResponse response = httpClient.execute(postRequest);
    BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
    String sResponse;
    StringBuilder s = new StringBuilder();

    while((sResponse = reader.readLine()) != null)
    {
        s = s.append(sResponse);
    }

    if(d) Log.i(E, "Send response:\n" + s);
}
catch (Exception e)
{
    if(d) Log.e(E, "Error while sending: " + e.getMessage());
    return ERROR;
}

问题答案:

使用ByteArrayOutputStream后再调用时#toByteArray(),实际上已使JPEG使用的内存量 增加一倍
ByteArrayOutputStream用编码的JPEG保留一个内部数组,当您调用#toByteArray()它时分配一个
数组并从内部缓冲区复制数据。

考虑将大型位图编码为临时文件,并使用FileOutputStreamFileInputStream编码并发送图像。

如果没有“上传”,您的应用程序仅凭我认为的内存中的巨大位图就能“很好地”生存下来?

编辑: FileBody

File img = new File(this is where you put the path of your image)
ContentBody cb = new FileBody(img, "File" + pad(random.nextInt(9999) + 1) + ".jpg", "image/jpg", null);
MultipartEntity reqEntity = new multipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
reqEntity.addPart("Filedata", cb);
reqEntity.addPart("dropboxId", new StringBody(URLEncoder.encode(uid)));


 类似资料:
  • 问题内容: 当网站输出到客户端时,我正在尝试优化网站的大小。缓存时,我分别只有1.9MB和29KB。问题在于,第一次加载包含的图像对于移动设备而言并未经过优化。它具有1080p分辨率。 因此,我正在寻找一种方法,该方法允许我首先加载低分辨率版本(),一旦网站加载完毕,请使用高分辨率版本- 甚至分辨率接近所用设备的分辨率版本(或只是) 。 就像每个人都期望的那样,使用CSS设置背景。它应用于主体,整

  • 我有一个java的列表。awt。图像,每个分辨率为300 DPI。我想打印它们,当我开始打印这些图像时(使用javax.PrintService API),只打印一些图像的一部分,因为Java的打印/3D类默认使用72DPI(相对于我的图像的300 DPI)。但是,当我使用72 DPI的图像(与Java默认值具有相同的分辨率)时,所有图像都可以很好地打印(打印整个图像时,而不仅仅是其中的一部分)。

  • 问题内容: 情况:我有一张图片,用户可以在上面添加文本,在其中更改颜色,大小,位置,旋转度,字体大小等,我需要将所有这些文本保存在一张图像中。没关系,我通过使用图形缓存保存它们。 问题:由于用户设备的屏幕尺寸,结果图像可能很小。我需要此图像的分辨率为1500-2000像素。如果仅调整此图像的大小,则文本看起来模糊并且不如在屏幕上显示的那样好。 问题:还有其他方法可以将文本视图另存为图像,而不仅仅是

  • 在Java 9中,已经推出了一种新的多分辨率图像API,支持具有不同分辨率变体的多个图像。 该API允许将具有不同分辨率的一组图像用作单个多分辨率图像。 以下是多分辨率图像的主要操作。 - 获取一个特定的图像,这是最好的变体,以指定的尺寸表示这个逻辑图像。 - 获取所有分辨率变体的可读列表。 示例 执行上面示例代码,得到以下结果 -

  • 我看过使用PDFBox基于图像DPI提取图像的代码,如下所示 在上面的代码中,我可以指定图像分辨率(150),同时从pdf中提取图像。更高的分辨率,我得到更大的图像作为回报。 现在,我想反转它的意思是在将图像写入PDF时指定图像的分辨率/dpi,但下面的代码没有提供指定dpi的选项吗?有谁能指引我在哪里失踪 在将图像写入pdf时,请告诉我在哪里可以传递分辨率/DPI参数(因为图像大于pdf页面大小

  • 注意:Photoshop 提供了已更新的“图像大小”对话框。请参阅调整图像大小,以了解更多信息。 关于像素尺寸和打印图像分辨率 像素尺寸测量了沿图像的宽度和高度的总像素数。分辨率是指位图图像中的细节精细度,测量单位是像素/英寸 (ppi)。每英寸的像素越多,分辨率越高。一般来说,图像的分辨率越高,得到的印刷图像的质量就越好。两幅相同的图像,分辨率分别为 72 ppi 和 300 ppi;套印缩放比