2015-04-05 65 views
0

這是我的課程。在這裏我讓用戶在繪畫上繪製一些東西。那麼當用戶點擊菜單欄中的保存選項時,我想將圖像保存爲圖像文件。但是通過此代碼,目錄不會被創建。將位圖轉換爲圖像文件時未創建目錄

package com.nisani.sampaint; 

import android.app.Activity; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.graphics.Bitmap.Config; 
import android.graphics.Canvas; 
import android.graphics.Color; 
    import android.graphics.Matrix; 
    import android.graphics.Paint; 
    import android.graphics.PointF; 
    import android.graphics.drawable.BitmapDrawable; 
    import android.graphics.drawable.Drawable; 

    import android.os.Bundle; 
    import android.os.Environment; 
    import android.util.Log; 

    import android.view.Display; 
    import android.view.Menu; 
import android.view.MenuItem; 
    import android.view.MotionEvent; 
    import android.view.View; 
    import android.view.View.OnTouchListener; 
    import android.view.WindowManager; 
    import android.widget.ImageView; 
    import android.widget.Toast; 

    import java.io.File; 
    import java.io.FileOutputStream; 

    public class MainActivity extends Activity implements OnTouchListener { 
    ImageView imageView; 

    Bitmap bitmap; 
    Canvas canvas; 
static int mImageCount; 
Intent in; 
    Paint paint; 
    float downx = 0, downy = 0, upx = 0, upy = 0; 
    float startX = 0; 
    float startY = 0; 
    float endX = 0; 
    float endY = 0; 
View mView; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
     getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

     Toast.makeText(getApplicationContext(), "Rotate the phone to clear screen!!",Toast.LENGTH_SHORT).show(); 
    imageView = (ImageView) this.findViewById(R.id.imageView1); 
    Display currentDisplay = getWindowManager().getDefaultDisplay(); 
    float dw = currentDisplay.getWidth(); 
    float dh = currentDisplay.getHeight(); 
    bitmap = Bitmap.createBitmap((int) dw, (int) dh, 
     Bitmap.Config.ARGB_8888); 
    canvas = new Canvas(bitmap); 
    paint = new Paint(); 
    paint.setColor(Color.BLACK); 
    imageView.setImageBitmap(bitmap); 

    imageView.setOnTouchListener(this); 
    } 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_pattern1, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_home) { 
     return true; 
    } 
    if (id == R.id.action_p1) { 
     in=new Intent(MainActivity.this,Pattern1.class); 
     startActivity(in); 
    } 
    if (id == R.id.action_rect) { 
     in=new Intent(MainActivity.this,Rectangle.class); 
     startActivity(in); 
    } 
    if (id == R.id.action_save) { 


     File myDir=new File("/sdcard/sampaint"); 
     boolean a=myDir.mkdirs(); 
     if(a==true){ 
      Toast.makeText(MainActivity.this,"directory created",Toast.LENGTH_SHORT).show(); 
     } 
     else{ 
      Toast.makeText(MainActivity.this,"directory not created",Toast.LENGTH_SHORT).show(); 
     } 

     mImageCount++; 
     String fname = "image-" + mImageCount + ".jpg"; 
     File file = new File (myDir, fname); 
     if (file.exists()) file.delete(); 
     saveAsJpg (file); 
    } 
    return super.onOptionsItemSelected(item); 
} 
public void saveAsJpg (File f) { 
    String fname = f.getAbsolutePath(); 
    FileOutputStream fos = null; 
    try { 
     fos = new FileOutputStream (f); 
// Take the bitmap of the view and write it out as a jpeg. 
     bitmap.compress (Bitmap.CompressFormat.JPEG, 95, fos); 
    } catch (Throwable ex) { 
     ex.printStackTrace(); 
    } 

} 
public void onBackPressed(){ 

    finish(); 
    super.onBackPressed(); 
} 
public boolean onTouch(View v, MotionEvent event) { 
    int action = event.getAction(); 

    switch (action) {  
    case MotionEvent.ACTION_DOWN: 
     startX=event.getX(); 
     startY=event.getY(); 
     break; 
    case MotionEvent.ACTION_MOVE:   
    endX = event.getX(); 
    endY = event.getY(); 
    canvas.drawLine(startX,startY,endX,endY, paint); 

    imageView.invalidate(); 
    startX=endX; 
    startY=endY; 
    break; 
    case MotionEvent.ACTION_UP: 
     endX = event.getX(); 
     endY = event.getY(); 
     canvas.drawLine(startX,startY,endX,endY, paint); 
     //canvas.drawPaint(paint); 
     imageView.invalidate(); 
    break; 
    case MotionEvent.ACTION_CANCEL: 
    break; 
    default: 
    break; 
    } 
    return true; 
    } 
} 
+0

這是因爲您的文件對象無法找到sdcard的路徑。您應該使用Environment.getExternalStorageDirectory()+「/ sampaint」來代替使用/ sdcard/sampaint。另外不要忘記在清單文件中寫入外部存儲權限。 – Aakash 2015-04-05 01:15:38

+0

仍然是同樣的問題 – sammalik 2015-04-05 01:24:08

+0

你是否得到任何異常? – Aakash 2015-04-05 01:31:49

回答

0

給出的路徑Environment.getExternalStorageDirectory()+ 「/ sampaint /」 + filename.jpg

或者

做到這一點如下 檔案文件=新的文件(Environment.getExternalStorageDirectory( )+「/ sampaint /」,fname);

+0

我已經這樣做了。看到代碼 – sammalik 2015-04-05 02:02:15

+0

是啊現在它的工作,但只顯示空白圖像。 – sammalik 2015-04-05 02:13:26

+0

輸出流或正在創建的位圖可能存在一些問題。謝謝 – Aakash 2015-04-05 02:21:40