gpt4 book ai didi

Android 将多个位图图 block 流式传输到单个 jpeg 文件

转载 作者:太空狗 更新时间:2023-10-29 15:19:21 28 4
gpt4 key购买 nike

我正在开发一个图像处理应用程序,它必须能够处理大图像,例如那些由相机拍摄的图像,我采用的方法是将源图像拆分为多个大小合适的图 block ,以便可以将图 block 作为位图单独加载到内存中,而不会超过可怕的 VM 限制,下一次图像处理是在逐个瓷砖,这一切都很好,但直到我想将这些瓷砖拼接回最终的 jpeg 图像。
我正在寻找可以执行以下操作的内置 sdk api 或免费软件解决方案:

  • 打开jpeg输出文件作为输出流
  • 将 RGB 像素从位图(图 block 1)流式传输到 jpeg 输出流
  • 将 RGB 像素从位图(图 block 2)流式传输到 jpeg 输出流
  • 等..对于所有的瓷砖
  • 关闭jpeg输出流
  • 除了编写我自己的 jpeg 编码器之外,还有什么想法或建议吗?

    最佳答案

    这个怎么样:

    FileOutputStream outFile = new FileOutputStream(output_file);
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outFile);
    outFile.flush();
    outFile.close();

    您可以调整质量设置 (100)。查看docs

    您仍然需要决定如何对其进行切片。但是,如果您是在设备上拍摄图像,如果一开始没有引起内存问题,为什么加载整个图像会出现问题?

    将 Tiles 重新拼接在一起:这是我知道有效的 slippy maps 使用的一种简单方法。

    1. 以标准尺寸(比如 256x256)切割瓷砖
    2. 为每个图 block 分配一个 x,y 值 - 这可以是目录结构或文件名约定:即“0_0.jpg”
    3. 图 block 名称(数字)与其顶部/左侧像素位置相关。

    每个图 block 编号可以通过以下方式计算:

    tileX = floor(pixelX/256)

    tileY = floor(pixelY/256)

    因此像素 0,0 处的瓦片 = 瓦片 (0,0),像素 256,0 处的瓦片是瓦片 (1,0),等等...

    关于Android 将多个位图图 block 流式传输到单个 jpeg 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9507595/

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