Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在没有位图的情况下将位图写入文件。compress方法_Android_Bitmap_Android Bitmap - Fatal编程技术网

Android 如何在没有位图的情况下将位图写入文件。compress方法

Android 如何在没有位图的情况下将位图写入文件。compress方法,android,bitmap,android-bitmap,Android,Bitmap,Android Bitmap,我不想使用位图的压缩方法。我只想直接写进sd卡。不想在我的情况下使用压缩。基于标题:这会将URL直接保存到文件中: FileOutputStream output = ctx.openFileOutput(localFileName, context.MODE_PRIVATE); URLConnection openConnection = new URL(url).openConnection(); openConnection.con

我不想使用位图的压缩方法。我只想直接写进sd卡。不想在我的情况下使用压缩。

基于标题:这会将URL直接保存到文件中:

    FileOutputStream output = ctx.openFileOutput(localFileName, context.MODE_PRIVATE);

            URLConnection openConnection = new URL(url).openConnection();
            openConnection.connect();
            InputStream inputStream = openConnection.getInputStream();
            byte[] buffer = new byte[1024];
            for (int n = inputStream.read(buffer); n >= 0; n = inputStream.read(buffer))
                output.write(buffer, 0, n);
            output.flush();
            output.close();
            inputStream.close();
您可以将openFileOutput更改为存储在SD卡上的新FileOutputStream(新文件(“filepath”))


但是您似乎在使用ImageLoader API时遇到了问题。

大多数常见的图像格式都是自然压缩的(例如PNG、JPEG、WebP)。您希望使用什么特定的图像格式?我希望图像本身为PNG格式,但不希望该方法减小其大小或分辨率。将文件另存为原始文件。“不希望方法减小其大小或分辨率”-compress()从不更改分辨率。“将文件另存为原始文件”--由于您没有提供“原始文件”来自何处的演示,并且由于您没有定义“将文件另存为原始文件”的确切含义,这将是任何人都很难帮助你。我从服务器上得到的图像url,我在浏览器中打开它的规格如下:1000*665,它的大小是855kb。我使用imageloader将这个imageurl加载到imageview中,并将位图保存到sd卡中。但当我在android设备中看到图像时,它的规格如下:500*332,大小=142kb。我正在使用这种方法编写位图b.compress(bitmap.CompressFormat.PNG,100,writeStream);最有可能的是,您的“imageloader”正在更改您的图像,例如将其降采样为只显示在
ImageView
中所需的大小。但是,由于您还没有提供详细的说明,因此很难证明这一点。问题不在于
compress()
,因为
compress()
不会改变位图的分辨率。索引1024是否足以满足任何图像文件大小?buff用于inputStream.read。关于这个数字有很多讨论,但我们通常使用1024或2048。您还可以告诉我如何在不使用压缩方法的情况下将位图(我已经提供)写入文件吗?唯一的方法是将字节数组直接写入磁盘,但由于格式原因,这会使图像无法读取,此解决方案涉及读取每个字节并将其插入流,你也需要自己解码位图。