2011-07-26 30 views
0

所以我有一個小問題。我無法找到如何在SD卡或其他地方可以查看圖像(無論在哪裏)解密後保存位圖文件。我現在使用的代碼是:如何在Android中保存並顯示位圖?

public class SimpleCryptoActivity extends Activity { 
    private static final int IO_BUFFER_SIZE = 4 * 1024; 
    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

       try { 
        AssetManager am = this.getAssets(); 
        InputStream is = am.open("2000_1.jpg_encrypted"); // get the encrypted image from assets folder 

        ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
        byte[] b = new byte[IO_BUFFER_SIZE]; 
        int read; 
        while ((read = is.read(b)) != -1) { //convert inputstream to bytearrayoutputstream 
         baos.write(b, 0, read); 
        }       
       long start = System.currentTimeMillis()/1000L; // start 

        byte[] keyStart = "MARTIN_123_MARTIN_123".getBytes(); // specific key value 
        KeyGenerator kgen = KeyGenerator.getInstance("AES"); //aes 
        SecureRandom sr = SecureRandom.getInstance("SHA1PRNG"); 
        sr.setSeed(keyStart); 
        kgen.init(128, sr); 
        SecretKey skey = kgen.generateKey(); 
        byte[] key = skey.getEncoded();  

        byte[] decryptedData = decrypt(key,b); //decryption 
       long end = System.currentTimeMillis()/1000L; // end 
       Log.i("TEST","Time start "+ String.valueOf(start)); //showing the strat in ms 
       Log.i("TEST","Time end "+ String.valueOf(end));  //showing the end in ms 
        Bitmap bitmap = BitmapFactory.decodeByteArray(b , 0, b .length); //decoding bytearrayoutputstream to bitmap 



        is.close(); // close the inputstream 
        baos.close(); // close the bytearrayoutputstream 
       } 
       catch(Exception e){ 
        e.fillInStackTrace(); 
       } 
      } 

      //decrypt 
      private byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception { 
       SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); 
       Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 
       cipher.init(Cipher.DECRYPT_MODE, skeySpec); 
       byte[] decrypted = cipher.doFinal(encrypted); 

      return decrypted; 
      } 
} 

另一個問題too.I'm好奇,爲什麼我不能看到LogCat.Am的

Log.i("TEST","Time start "+ String.valueOf(start)); //showing the strat in ms 
       Log.i("TEST","Time end "+ String.valueOf(end));  //showing the end in ms 

我做錯了什麼還是...?感謝您的幫助!

回答

0

如果,如果你將它存儲在SD或根本任何存儲並不重要。您可以在佈局中添加ImageView

ImageView mydecrptimg = (ImageView)findViewById(R.id.imageview); 

mydecrptimg.setImageBitmap(yourbitmap); 

或者其存儲到MediaStore。在這裏閱讀更多關於這個提供商

http://developer.android.com/reference/android/provider/MediaStore.Images.Media.html

編輯:把這個類當前類裏面,然後實例爲您ImageView

private class DrawMyBitmap extends ImageView{ 

     private Bitmap bmp = null; 
     public DrawMyBitmap(Context context, Bitmap mybmp) { 
      super(context); 
      this.bmp=mybmp; 
     } 

     @Override 
     protected void onDraw(Canvas canvas) { 

      Paint paint = new Paint(); 

      paint.setFilterBitmap(true); 
      paint.setAntiAlias(true); 

      Rect bmprect = new Rect(0 ,0 , bmp.getHeight(), bmp.getWidth()); 
      canvas.drawBitmap(bmp, null, bmprect, paint); 
      super.onDraw(canvas); 
     } 
+0

我用imageView做了它,沒有錯誤它是運行但圖像沒有顯示出來。 – hardartcore

+0

等待我正在嘗試類似於創建'private class'並將其擴展到'ImageView'並使用'onDraw()'來完成這項工作。 –

+0

你能告訴我我應該在哪裏添加這段代碼,因爲我真的沒有明白嗎?謝謝! – hardartcore

-1

你在哪裏設置你想寫的文件呢?

你有清單中的WRITE_EXTERNAL_STORAGE權限嗎?

也許Logcat失去了重點,轉到DDMS的角度,並點擊模擬器上的應用程序正在運行。在Logcat控制檯右端的Debug上也設置Log輸出水平。

編輯:寫字節文件:

FileOutputStream fos = new FileOutputStream(strFilePath); 
    fos.write(bytes); 
    fos.close(); 
+0

我想保存這一點:「位圖位= BitmapFactory.decodeByteArray( b,0,b .length);'我真的不知道如何保存文件,我試圖把它作爲ImageView的背景,並且它不工作,所以我只需要將它保存在一個我可以在那裏看到它的地方。不管在哪裏。是的,我有權限添加到我的清單文件。 – hardartcore

+0

我做了你所說的有關LogCat的一切,但它仍然沒有顯示我的消息。 – hardartcore

+0

也許你已經創建了一個名爲TEST的過濾器,並在那裏顯示消息。 –

相關問題