如何将图像正确保存到 SD 卡?

Posted

技术标签:

【中文标题】如何将图像正确保存到 SD 卡?【英文标题】:How to save images correctly to sd-card? 【发布时间】:2014-01-04 23:26:54 【问题描述】:

我是一名 android 初学者,对编码知之甚少。我已经在我的 viewfippler 库中实现了一个保存按钮,但是在这一行“Bitmap bitmap = getBitmapFromImageView(ImageView imageView);”上出现了两个错误在 saveimage() 方法中。编译器说有一个“)”,并且在上面指定的行上有一个非法的表达式开头。相关代码如下。

ViewFlipper.java

    public class ViewFlipperActivity extends Activity 
        @Override
        public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        findViewById(R.id.btnSave).setOnClickListener(new OnClickListener() 
            @Override
            public void onClick(View view) 
                saveimage();
            
        );

       ........


    public Bitmap getBitmapFromImageView(ImageView imageView) 
        int viewWidth = imageView.getWidth();
        int viewHeight = imageView.getHeight();
        Bitmap bitmap = Bitmap.createBitmap(viewWidth, viewHeight, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        imageView.layout(0, 0, viewWidth, viewHeight);
        imageView.draw(canvas);
        return bitmap;
    


    public static void saveimage()


        Bitmap bitmap = getBitmapFromImageView(ImageView imageView);

        File f =new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/HD GOSPEL LOCKSCREENS");
        if(!f.exists())
        
            f.mkdirs();
        
        f = new File(f.getAbsolutePath(),
                String.valueOf(System.currentTimeMillis()) +"hdgospelLockScreen.jpg");
        if(!f.exists())
        
            try 
                f.createNewFile();
             catch (IOException e) 
                // TODO Auto-generated catch block
                e.printStackTrace();
            
        

        try 
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(f));
         catch (FileNotFoundException e) 
            // TODO Auto-generated catch block
            e.printStackTrace();
        

    
   .......

【问题讨论】:

【参考方案1】:

您的语法不正确。更改这一行:Bitmap bitmap = getBitmapFromImageView(ImageView imageView);Bitmap bitmap = getBitmapFromImageView(imageView); 其中 imageView 是一个 ImageView 对象。

编辑:另外,你的静态函数 saveImage 应该接受 ImageView 对象:

public static void saveImage(ImageView imageView) 

【讨论】:

您必须先创建 ImageView 或将其传递给我在上面的编辑中描述的静态函数。 如何将它传递给静态函数? 您的方法不一定必须是静态的。 好的,我会记住这一点。我放了 saveimage(ImageView imageView);在我保存的 onClick 监听器中,但它仍然给我错误 您的代码使用了一些我以前没有使用过的第三方库。我的建议是保持一个不变的 ImageViews 列表。 List<ImageView> myList; myList.add(gift); myList.add(besober); 等然后,当您调用 int index = flipper.getDisplayedChild(); 时,使用该索引来获取您的 ImageView:ImageView img = myList.get(index);。然后,将该 img 传递给您的 saveImage 方法。

以上是关于如何将图像正确保存到 SD 卡?的主要内容,如果未能解决你的问题,请参考以下文章

将图像、音频和视频保存到 SD 卡

如何将可绘制资源中的图像保存到 SD 卡?

Android - 将图像从 URL 保存到 SD 卡

将叠加图像保存到 SD 卡

从android寻呼机将图像保存到sd卡

将位图从 arraylist 保存到 SD 卡 - 保存的文件不可读