私は、Androidカメラアプリで撮影した写真にテキスト(「hola」)を追加し、その画像をSDカードに保存するこのシンプルなアプリを改善しようとしています。
しかし、返されたデータからサムネイル画像にテキストを追加し、ファイルをSDカードに保存することしかできませんでした。
フルサイズの写真でまったく同じことをするために、誰かが私を正しい方向に向けることができますか?
どうもありがとう!!
私がこれまでに持っているもの:(チュートリアルのコードとstackoverflowに関する同様の質問への回答を使用して)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button captureBtn = (Button)findViewById(R.id.capture_btn);
captureBtn.setOnClickListener(this);
}
public void onClick(View v) {
if (v.getId() == R.id.capture_btn) {
try {
Intent tomaFotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(tomaFotoIntent, CAMERA_CAPTURE);
}
catch(ActivityNotFoundException anfe){
String errorMessage = "Device doesn't support capturing images";
Toast toast = Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT);
toast.show();
}
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
//user is returning from capturing an image using the camera
if(requestCode == CAMERA_CAPTURE){
//get the Uri for the captured image
picUri = data.getData();
//get the returned data
Bundle extras = data.getExtras();
//get the cropped bitmap
Bitmap thePic = extras.getParcelable("data");
//agregamos texto
bmConTexto = writeTextOnDrawable(thePic, "hola");
//guardamos la nueva imagen
saveBitmap(bmConTexto.getBitmap());
//retrieve a reference to the ImageView
ImageView picView = (ImageView)findViewById(R.id.picture);
//display the returned cropped image
picView.setImageBitmap(bmConTexto.getBitmap());
}
}
}
private BitmapDrawable writeTextOnDrawable(Bitmap thePic, String text) {
Bitmap bm = thePic.copy(Bitmap.Config.ARGB_8888, true);
Typeface tf = Typeface.create("Helvetica", Typeface.BOLD);
Paint paint = new Paint();
paint.setStyle(Style.FILL);
paint.setColor(Color.WHITE);
paint.setTypeface(tf);
paint.setTextAlign(Align.CENTER);
paint.setTextSize(20);
Rect textRect = new Rect();
paint.getTextBounds(text, 0, text.length(), textRect);
Canvas canvas = new Canvas(bm);
//Calculate the positions
int xPos = (canvas.getWidth() / 2) - 2; //-2 is for regulating the x position offset
//"- ((paint.descent() + paint.ascent()) / 2)" is the distance from the baseline to the center.
int yPos = (int) ((canvas.getHeight() / 2) - ((paint.descent() + paint.ascent()) / 2)) ;
canvas.drawText(text, xPos, yPos, paint);
return new BitmapDrawable(getResources(), bm);
}
public void saveBitmap(Bitmap bm)
{
try
{
String mBaseFolderPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/DCIM/Camera/";
String mFilePath = mBaseFolderPath + "abcd.jpg";
FileOutputStream stream = new FileOutputStream(mFilePath);
bm.compress(CompressFormat.JPEG, 100, stream);
stream.flush();
stream.close();
}
catch(Exception e)
{
Log.e("Could not save", e.toString());
}
}