2015-01-01 2 views
2

두 비트 맵을 결합하여 이미지 뷰로 설정하고 단추를 클릭 할 때 해당 비트 맵을 저장하려고합니다. 그러나 비트 맵을 결합하면 비트 맵이 두 번째 비트 맵을 더 크게 표시합니다두 비트 맵을 결합하여 하나의 이미지로 저장

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     getBitmap(image1); 
     Bitmap drawingBitmap = Bitmap.createBitmap(parts.getWidth(), 
          parts.getHeight(),Bitmap.Config.ARGB_8888); 
     canvas = new Canvas(drawingBitmap); 

     canvas.drawBitmap(parts,0,0,null); 
     canvas.drawBitmap(touch,0,0,null); 

     bit=drawingBitmap; 

     public void getBitmap(View v) { 
      Bitmap bitmap= Bitmap.createBitmap(v.getWidth(),v.getHeight(), Bitmap.Config.ARGB_8888); 
      Canvas c = new Canvas(bitmap); 
      v.draw(c); 

     touch=bitmap; 
    } 

    Button btn = (Button) findViewById(R.id.button); 

    btn.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      SaveImage save = new SaveImage(); 
      save.Save(getApplicationContext(),bit); 
     } 
    }); 

} 

여기 부품 보류 카메라 사진에 대한 비트 맵과 image1에 동적으로 생성되는 이미지 뷰입니다 : 그것은보다 실제 size.here 내 코드입니다.

SaveImage.java

package com.example.tattoodesign; 

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.Calendar; 

import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.Canvas; 
import android.graphics.Paint; 
import android.media.MediaScannerConnection; 
import android.net.Uri; 
import android.os.Environment; 
import android.widget.Toast; 

public class SaveImage { 

    private Context TheThis; 
    private String NameOfFolder = "/PaintImage"; 
    public String NameOfFile = null; 
    //private ArrayList<Bitmap> images = null; 

    public void Save(Context context,Bitmap ImageToSave){ 
      TheThis = context; 
      String file_path = Environment.getExternalStorageDirectory().getAbsolutePath()+ NameOfFolder; 
      String CurrentDateAndTime= getCurrentDateAndTime(); 
      File dir = new File(file_path); 
      NameOfFile="PaintImage"+CurrentDateAndTime+ ".jpg"; 

      if(!dir.exists()){ 
       dir.mkdirs(); 
      } 

      File file = new File(dir,NameOfFile); 
      if (file.exists()) file.delete(); 
      try { 
       FileOutputStream fOut = new FileOutputStream(file); 
       ImageToSave.compress(Bitmap.CompressFormat.JPEG, 85, fOut); 
       fOut.flush(); 
       fOut.close(); 
       MakeSureFileWasCreatedThenMakeAvabile(file); 

      } 
      catch (FileNotFoundException e) { 
       UnableToSave();} 
      catch (IOException e){ 
       UnableToSave(); 
      } 

     } 

    private void MakeSureFileWasCreatedThenMakeAvabile(File file) { 
     MediaScannerConnection.scanFile(TheThis, 
       new String[] { file.toString() }, null, 
       new MediaScannerConnection.OnScanCompletedListener() { 
        public void onScanCompleted(String path, Uri uri) { 
        } 
       }); 

    } 

    private String getCurrentDateAndTime() { 
     Calendar c = Calendar.getInstance(); 
     SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); 
     String formattedDate = df.format(c.getTime()); 
     return formattedDate; 
    } 

    private void UnableToSave() { 
     Toast.makeText(TheThis, "Picture cannot to gallery", Toast.LENGTH_SHORT) 
       .show(); 

    } 
    } 

는이 문제를 어떻게 해결할 수 있습니까?

어떤 도움을 주셔서 감사합니다.

감사합니다.

답변

1

"실제 크기보다 큰"이미지가 표시되지 않을 수 있습니다. "실제 크기"가 생각하는 것과 다를 가능성이 큽니다.

겉보기 크기는 픽셀 너비/높이 및 dpi와 관련이 있습니다.

다른 이미지와 일치하도록 이미지 중 하나를 확대해야합니다. 예를 들어, Bitmap.createScaledBitmap

+1

이 경우에 해당 될 수 있습니다.이 답변을 추가하면 같은 이미지를 결합 해 보거나 단지 두 번째 이미지가 첫 번째 이미지보다 크지 않은지 확인할 수 있습니다. – Dhina

+0

같은 이미지를 결합하려고하면 다른 이미지를 결합하려고 할 때 두 번째 이미지가 첫 번째 이미지보다 큽니다. –

관련 문제