Forms Android Bitmap 处理

  1 forms 接口定义
  2 
  3 using System;
  4 using System.Collections.Generic;
  5 using System.IO;
  6 
  7 namespace
  8 {
  9     public interface IUtilPicture
 10     {
 11         List<string> ResizeBitmap(string imagePath); //图片采样缩小    
 12         //删除图片
 13         void DeletePicture(string imagePath);
 14     }
 15 }
 16 
 17 
 18 平台实现
 19 using System;
 20 using System.Collections.Generic;
 21 using System.IO;
 22 using System.Diagnostics;
 23 
 24 using Xamarin.Forms;
 25 
 26 using.TDroid;
 27 
 28 using Android.Graphics;
 29 
 30 [assembly:Dependency (typeof(UtilPicture))]
 31 namespace.TDroid
 32 {
 33     public class UtilPicture : Java.Lang.Object,IUtilPicture
 34     {
 35         public UtilPicture ()
 36         {        
 37 
 38         }
 39 
 40         public List<string> ResizeBitmap (string imagePath)
 41         {
 42             List<string> listImagePath = new List<string> ();
 43             BitmapFactory.Options newOptions = new BitmapFactory.Options ();
 44             //开始du图片
 45             newOptions.InJustDecodeBounds = true;
 46             Bitmap bitmap = BitmapFactory.DecodeFile (imagePath, newOptions);
 47             newOptions.InJustDecodeBounds = false;
 48             int be = calculateInSampleSize (newOptions,700,700);            
 49             newOptions.InSampleSize = be;
 50             bitmap = BitmapFactory.DecodeFile (imagePath, newOptions);
 51             Bitmap tempBitOne = compressImage (bitmap,60);
 52             bitmap.Recycle ();
 53             string shinkOne = SaveCompressImage (tempBitOne, imagePath,"");
 54             listImagePath.Add (shinkOne);
 55             string shinkTwo = SaveShinkImage (shinkOne);
 56             listImagePath.Add (shinkTwo);
 57             return listImagePath;
 58         }
 59                 
 60 
 61         public void DeletePicture (string imagePath)
 62         {
 63             if (File.Exists (imagePath)) {
 64                 try {
 65                     File.Delete (imagePath);
 66                 } catch (IOException ex) {
 67                     Debug.WriteLine ("DeleteFile:" + ex.Message);
 68                     return;
 69                 }
 70             }
 71         }
 72 
 73         private Bitmap compressImage (Bitmap bitmap,int byteCount)
 74         {
 75             MemoryStream mStrean = new MemoryStream ();
 76             bitmap.Compress (Bitmap.CompressFormat.Jpeg, 100, mStrean);        
 77             int options = 100;
 78             while (mStrean.ToArray ().Length / 1024 > byteCount) {
 79                 mStrean.SetLength (0);
 80                 mStrean.Position = 0;
 81                 bitmap.Compress (Bitmap.CompressFormat.Jpeg, options, mStrean);
 82                 options -= 10;
 83             }
 84             bitmap.Recycle ();
 85             Bitmap tempBit = BitmapFactory.DecodeByteArray (mStrean.ToArray (), 0, mStrean.ToArray ().Length);
 86             mStrean.SetLength (0);
 87             mStrean.Position = 0;
 88             return tempBit;            
 89         }
 90 
 91         private string SaveCompressImage (Bitmap mBitmap, string path,string fileShink)  //上传图片
 92         {
 93             MemoryStream mStrean = new MemoryStream ();
 94             mBitmap.Compress (Bitmap.CompressFormat.Jpeg, 100, mStrean);
 95             var image1Path = Environment.GetFolderPath (Environment.SpecialFolder.Personal);
 96             ///data/data/PocketDoctor.TDroid/files
 97             string mPath = Android.OS.Environment.ExternalStorageDirectory + "/FDEKYYYG/MemoImages";    
 98             mPath += fileShink;
 99             if (!Directory.Exists (mPath)) {
100                 Directory.CreateDirectory (mPath);
101             }
102             string fileName = path.Substring (path.LastIndexOf ('/') + 1);
103             string imageFilePath = mPath + "/" + fileName;
104             FileInfo fileInfo;        
105             fileInfo = new FileInfo (imageFilePath);
106             try {
107                 FileStream fStream = fileInfo.Create ();                
108                 fStream.Write (mStrean.ToArray (), 0, mStrean.ToArray ().Length);
109                 mStrean.SetLength (0);
110                 mStrean.Position = 0;            
111                 fStream.Close ();
112                 mBitmap.Recycle ();
113             } catch (Exception ex) {            
114                 Debug.WriteLine ("DeleteFile:" + ex.Message);
115             }                        
116             return imageFilePath;
117         }
118 
119         private string SaveShinkImage (string imagePath) //缩略图
120         {
121             BitmapFactory.Options newOptions = new BitmapFactory.Options ();
122             //开始du图片
123             newOptions.InJustDecodeBounds = true;
124             Bitmap bitmap = BitmapFactory.DecodeFile (imagePath, newOptions);
125             newOptions.InJustDecodeBounds = false;        
126             int beTwo =  calculateInSampleSize (newOptions,70,70);
127             newOptions.InSampleSize = beTwo;
128             bitmap = BitmapFactory.DecodeFile (imagePath, newOptions);
129             Bitmap tempBitTwo = compressImage (bitmap,5);
130             bitmap.Recycle ();
131             string shinkOne = SaveCompressImage (tempBitTwo, imagePath,"Thumbnail");
132             return shinkOne;
133         }
134 
135         private  int calculateInSampleSize (
136             BitmapFactory.Options options, int reqWidth, int reqHeight)
137         {
138             // Raw height and width of image
139             int height = options.OutHeight;
140             int width = options.OutWidth;
141             int inSampleSize = 1;
142 
143             if (height > reqHeight || width > reqWidth) {
144 
145                 int halfHeight = height / 2;
146                 int halfWidth = width / 2;
147 
148                 // Calculate the largest inSampleSize value that is a power of 2 and keeps both
149                 // height and width larger than the requested height and width.
150                 while ((halfHeight / inSampleSize) > reqHeight
151                        && (halfWidth / inSampleSize) > reqWidth) {
152                     inSampleSize *= 2;
153                 }
154             }
155             return inSampleSize;
156         }
157     
158     }
159 }
View Code
原文地址:https://www.cnblogs.com/techidea/p/4693383.html