1

アクティビティを使用してフル画像を表示していますが、ユーザーにはそれを保存するためのボタンがあります。

インターネット上で画像をホストしている URL から画像ビューに画像が読み込まれています。

画像をPNGファイルとして保存しています。

画像を保存した後、その品質が低下します。PNG はロスレスではないことはわかっていますが、品質や解像度に妥協することなく、画像をそのまま保存する方法はありますか??

コードは次のとおりです。

buttonSave.setOnClickListener(new Button.OnClickListener()
{
    public void onClick(View arg0) 
    {
        fullSizeImage.buildDrawingCache();
        Bitmap bm=fullSizeImage.getDrawingCache();
        String root = Environment.getExternalStorageDirectory().toString();
        File myDir = new File(root + File.separator + "MyWallpapers");
        if(!myDir.exists())
        {
            myDir.mkdir();
        }
        String fname = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date())+".png";
        File file = new File (myDir, fname);
        /*if (file.exists ()) file.delete (); */
        try 
        {
            //FileOutputStream out = new FileOutputStream(file);
            /*FileOutputStream out = new FileOutputStream(file);

            bm.compress(Bitmap.CompressFormat.PNG, 100, out);*/

            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            bm.compress(Bitmap.CompressFormat.PNG, 100, bytes);

            file.createNewFile();
            //write the bytes in file
            FileOutputStream fo = new FileOutputStream(file);
            fo.write(bytes.toByteArray());
            bytes.flush();
            bytes.close();
            /*out.flush();
            out.close();*/
            Toast.makeText(FullSizeImageDisplay.this, "Wallpaper Saved in SDcard/MyWallpapers folder",Toast.LENGTH_SHORT).show();
            String[] paths = {root + File.separator + "MyWallpapers"};

            String[] mediaType = {"image/png"};
            MediaScannerConnection.scanFile(FullSizeImageDisplay.this, paths, mediaType, null);
            ContentValues values = new ContentValues();
            values.put(MediaStore.Images.Media.DATA, file.getAbsolutePath());
            values.put(MediaStore.Images.Media.MIME_TYPE, "image/png"); 

            getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
        } 
        catch (Exception e) 
        {
            e.printStackTrace();
        }

        OutputStream fOut = null;
        Uri outputFileUri;

        }
    });
}
4

1 に答える 1

1
fullSizeImage.buildDrawingCache();
Bitmap bm=fullSizeImage.getDrawingCache();

fullSizeImage が Image View の場合があります。

画像の読み込み中に問題が発生しています。BitmapFactory.Options のようなものを使用したに違いありません

以下の変更を行います

BitmapFactory.decodeStream(<param1>,param2,null);
于 2012-12-29T12:20:13.917 に答える