如何在viewpager中旋转图像并在现有路径上保存位图?

时间:2017-06-16 19:53:01

标签: android bitmap android-viewpager image-rotation

我正在开发一种类似的应用程序。

在这里,我使用视图寻呼机来显示存储在内部存储器中的图像,我有五个底部导航菜单。

现在我要做的是在旋转菜单上旋转图像,然后将旋转的位图保存到现有路径。

我搜索了很多但没有运气。

在菜单上点击:

new AsyncTask<Void,Void,Void>(){

    @Override
    protected Void doInBackground(Void... params) {
        try {
            Bitmap myBitmap = BitmapFactory.decodeFile(Constant.image_paths.get(viewPager.getCurrentItem()));
            Bitmap newBit = rotate(myBitmap,45);
            saveToInternalStorage(newBit,Constant.image_paths.get(viewPager.getCurrentItem()));
        } catch (Exception e){
            Log.d("error","error in rotate");
        }
        return null;
   }

   @Override
   protected void onPostExecute(Void aVoid) {
       super.onPostExecute(aVoid);
       myViewPagerAdapter.notifyDataSetChanged();
   }

}.execute();




public static Bitmap rotate(Bitmap source, float angle) {
    Matrix matrix = new Matrix();
    matrix.postRotate(angle);
    return Bitmap.createBitmap(source, 0, 0, source.getWidth(),source.getHeight(), matrix, false);
}
private String saveToInternalStorage(Bitmap bitmapImage,String path) throws IOException {
    ContextWrapper cw = new ContextWrapper(getActivity());
    // path to /data/data/yourapp/app_data/imageDir
 //   File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
    // Create imageDir
    File mypath = new File(path);

    if(mypath.exists()){
        mypath.delete();
    }

    if(!mypath.exists()){
        mypath.createNewFile();
    }
    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(mypath);
        // Use the compress method on the BitMap object to write image to the OutputStream
        bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, fos);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return mypath.getAbsolutePath();
}    

1 个答案:

答案 0 :(得分:0)

您无法通过此代码实现此目的,为此,您需要按照以下步骤操作:

  1. 将图像转换为从内部存储中访问的位图。
  2. 将该位图传递给您在上面发布的方法“rotate()”。
  3. 旋转方法将返回一个新的位图,通过存储中的“FileOutputStream”将该位图保存在第一次获取图像的路径上。
  4. 如果你不知道锄头来保存图像,请查看以下链接:

    Saving and Reading Bitmaps/Images from Internal memory in Android