0

사실 내가 갤러리에서 이미지를 선택하는 코드를 작성했지만 그려야하거나 그려 손으로 텍스트를 작성하는 방법을 몰라요. 편집 된 이미지는 sdcard에 별도로 저장해야합니다. 기본적으로 기본 페인트 앱을 만들어야합니다. 캔버스 내 선택한 이미지가 될 것이고, 내 터치가 원을 그리거나 다른 것을 그리기 위해 입력됩니다.갤러리에서 android에서 선택한 이미지에 손으로 텍스트를 그리거나 쓰는 방법은 무엇입니까?

package listdisplay.example.com.photoedit; 

import android.content.Intent; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.net.Uri; 
import android.os.ParcelFileDescriptor; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.Display; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 

import java.io.FileDescriptor; 
import java.io.IOException; 

public class MainActivity_photoedit extends AppCompatActivity { 
    private static final int RORC =0; 
    ImageView iview; 
    Button button,button2; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main_photoedit); 
     iview= (ImageView) findViewById(R.id.imageView); 

     button =(Button)findViewById(R.id.button); 
     button.setOnClickListener(new View.OnClickListener() { 
             @Override 
             public void onClick(View view) { 
              Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); 
              intent.addCategory(Intent.CATEGORY_OPENABLE); 
              intent.setType("image/*"); 
              startActivityForResult(intent,RORC); 
             } 
            } 

     ); 
} 
    @Override 
    public void onActivityResult(int requestCode,int resultCode,Intent resultData){ 
     if(requestCode==RORC && resultCode==RESULT_OK){ 
      Uri uri =null; 
      if(resultData!=null){ 
       uri=resultData.getData(); 
       try { 
        Bitmap bitmap= getBitmapFromUri(uri); 



        iview.setImageBitmap(bitmap); 
       } 
       catch (IOException e){ 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
    private Bitmap getBitmapFromUri(Uri uri) throws IOException{ 
     ParcelFileDescriptor parcelFileDescriptor = getContentResolver().openFileDescriptor(uri,"r"); 
     FileDescriptor fileDescriptor= parcelFileDescriptor.getFileDescriptor(); 
     Bitmap bitmap = BitmapFactory.decodeFileDescriptor(fileDescriptor); 

     parcelFileDescriptor.close(); 
     return bitmap; 
    } 
} 

답변

0

귀하의 요구 사항에 맞는 해결책을 찾았습니다. 그래서 이것을 시도해보세요.하지만 갤러리에서 가져온 이미지에 텍스트를 그리거나 쓰려면 이미지 뷰 대신 드로잉 뷰를 가져와야합니다.

여기 게시자가 코드를 게시하고 있습니다.

activity_main.xml :

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:orientation="vertical" 
    android:paddingBottom="5dp" 
    android:paddingTop="5dp" 
    tools:context=".MainActivity"> 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 

     <ImageButton 
      android:id="@+id/buttonNew" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:contentDescription="@string/start_new" 
      android:src="@drawable/new_pic" /> 

     <ImageButton 
      android:id="@+id/buttonBrush" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:contentDescription="@string/brush" 
      android:src="@drawable/brush" /> 

     <ImageButton 
      android:id="@+id/buttonErase" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:contentDescription="@string/erase" 
      android:src="@drawable/eraser" /> 

     <ImageButton 
      android:id="@+id/buttonSave" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:contentDescription="@string/save" 
      android:src="@drawable/save" /> 

     <ImageButton 
      android:id="@+id/buttonPickImage" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
      android:contentDescription="@string/save" 
      android:src="@drawable/save" /> 

    </LinearLayout> 

    <com.wordpress.priyankvex.paintapp.DrawingView 
     android:id="@+id/drawing" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_marginBottom="3dp" 
     android:layout_marginLeft="5dp" 
     android:layout_marginRight="5dp" 
     android:layout_marginTop="3dp" 
     android:layout_weight="1" 
     android:background="@color/white" /> 

    <!-- Color pallet --> 
    <LinearLayout 
     android:id="@+id/paint_colors" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 

     <ImageButton 
      android:layout_width="@dimen/large_brush" 
      android:layout_height="@dimen/large_brush" 
      android:layout_margin="2dp" 
      android:background="@color/skin" 
      android:contentDescription="@string/paint" 
      android:onClick="paintClicked" 
      android:src="@drawable/pallet" 
      android:tag="@color/skin" /> 

     <ImageButton 
      android:layout_width="@dimen/large_brush" 
      android:layout_height="@dimen/large_brush" 
      android:layout_margin="2dp" 
      android:background="@color/black" 
      android:contentDescription="@string/paint" 
      android:onClick="paintClicked" 
      android:src="@drawable/pallet" 
      android:tag="@color/black" /> 

     <ImageButton 
      android:layout_width="@dimen/large_brush" 
      android:layout_height="@dimen/large_brush" 
      android:layout_margin="2dp" 
      android:background="@color/red" 
      android:contentDescription="@string/paint" 
      android:onClick="paintClicked" 
      android:src="@drawable/pallet" 
      android:tag="@color/red" /> 

     <ImageButton 
      android:layout_width="@dimen/large_brush" 
      android:layout_height="@dimen/large_brush" 
      android:layout_margin="2dp" 
      android:background="@color/green" 
      android:contentDescription="@string/paint" 
      android:onClick="paintClicked" 
      android:src="@drawable/pallet" 
      android:tag="@color/green" /> 

     <ImageButton 
      android:layout_width="@dimen/large_brush" 
      android:layout_height="@dimen/large_brush" 
      android:layout_margin="2dp" 
      android:background="@color/blue" 
      android:contentDescription="@string/paint" 
      android:onClick="paintClicked" 
      android:src="@drawable/pallet" 
      android:tag="@color/blue" /> 

     <ImageButton 
      android:layout_width="@dimen/large_brush" 
      android:layout_height="@dimen/large_brush" 
      android:layout_margin="2dp" 
      android:background="@color/yellow" 
      android:contentDescription="@string/paint" 
      android:onClick="paintClicked" 
      android:src="@drawable/pallet" 
      android:tag="@color/yellow" /> 

    </LinearLayout> 

</LinearLayout> 

MainActivity.java :

import android.app.AlertDialog; 
import android.app.Dialog; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.database.Cursor; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.drawable.BitmapDrawable; 
import android.graphics.drawable.Drawable; 
import android.net.Uri; 
import android.os.Build; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.ImageButton; 
import android.widget.ImageView; 
import android.widget.LinearLayout; 
import android.widget.Toast; 

import java.util.UUID; 


public class MainActivity extends AppCompatActivity implements View.OnClickListener { 

    private DrawingView mDrawingView; 
    private ImageButton currPaint, drawButton, eraseButton, newButton, saveButton, buttonPickImage; 
    private float smallBrush, mediumBrush, largeBrush; 
    private final int RESULT_LOAD_IMAGE = 20; 
    private Uri pickedImage; 
    private String imagePath = ""; 
    public Bitmap PaintBitmap; 

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

     mDrawingView = (DrawingView) findViewById(R.id.drawing); 
     // Getting the initial paint color. 
     LinearLayout paintLayout = (LinearLayout) findViewById(R.id.paint_colors); 
     // 0th child is white color, so selecting first child to give black as initial color. 
     currPaint = (ImageButton) paintLayout.getChildAt(1); 
     currPaint.setImageDrawable(getResources().getDrawable(R.drawable.pallet_pressed)); 
     drawButton = (ImageButton) findViewById(R.id.buttonBrush); 
     drawButton.setOnClickListener(this); 
     eraseButton = (ImageButton) findViewById(R.id.buttonErase); 
     eraseButton.setOnClickListener(this); 
     newButton = (ImageButton) findViewById(R.id.buttonNew); 
     newButton.setOnClickListener(this); 
     saveButton = (ImageButton) findViewById(R.id.buttonSave); 
     saveButton.setOnClickListener(this); 
     buttonPickImage = (ImageButton) findViewById(R.id.buttonPickImage); 
     buttonPickImage.setOnClickListener(this); 

     smallBrush = getResources().getInteger(R.integer.small_size); 
     mediumBrush = getResources().getInteger(R.integer.medium_size); 
     largeBrush = getResources().getInteger(R.integer.large_size); 

     // Set the initial brush size 
     mDrawingView.setBrushSize(mediumBrush); 
    } 

    /** 
    * Method is called when color is clicked from pallet. 
    * 
    * @param view ImageButton on which click took place. 
    */ 
    public void paintClicked(View view) { 
     if (view != currPaint) { 
      // Update the color 
      ImageButton imageButton = (ImageButton) view; 
      String colorTag = imageButton.getTag().toString(); 
      mDrawingView.setColor(colorTag); 
      // Swap the backgrounds for last active and currently active image button. 
      imageButton.setImageDrawable(getResources().getDrawable(R.drawable.pallet_pressed)); 
      currPaint.setImageDrawable(getResources().getDrawable(R.drawable.pallet)); 
      currPaint = (ImageButton) view; 
      mDrawingView.setErase(false); 
      mDrawingView.setBrushSize(mDrawingView.getLastBrushSize()); 
     } 
    } 

    @Override 
    public void onClick(View v) { 
     int id = v.getId(); 
     switch (id) { 
      case R.id.buttonBrush: 
       // Show brush size chooser dialog 
       showBrushSizeChooserDialog(); 
       break; 
      case R.id.buttonErase: 
       // Show eraser size chooser dialog 
       showEraserSizeChooserDialog(); 
       break; 
      case R.id.buttonNew: 
       // Show new painting alert dialog 
       showNewPaintingAlertDialog(); 
       break; 
      case R.id.buttonSave: 
       // Show save painting confirmation dialog. 
       showSavePaintingConfirmationDialog(); 
       break; 

      case R.id.buttonPickImage: 
       // Show save painting confirmation dialog. 
       Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       startActivityForResult(i, RESULT_LOAD_IMAGE); 
       break; 
     } 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK) { 
      pickedImage = data.getData(); 
      String[] filePath = {MediaStore.Images.Media.DATA}; 
      Cursor cursor = getContentResolver().query(pickedImage, filePath, null, null, null); 
      cursor.moveToFirst(); 
      imagePath = cursor.getString(cursor.getColumnIndex(filePath[0])); 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 

       // set Gallery Image to Drawing-view 
       if (imagePath != null) { 
        PaintBitmap = getResizeBitmap(imagePath); 
        BitmapDrawable ob = new BitmapDrawable(getResources(), PaintBitmap); 
        mDrawingView.setBackgroundDrawable(ob); 
       } 
      } 
     } 
    } 

    public static Bitmap getResizeBitmap(String path) { 
     BitmapFactory.Options op = new BitmapFactory.Options(); 
     op.inPreferredConfig = Bitmap.Config.ARGB_8888; 
     Bitmap bmap = BitmapFactory.decodeFile(path, op); 
     int nh = (int) (bmap.getHeight() * (1024.0/bmap.getWidth())); 
     Bitmap bitmapThumbnail = Bitmap.createScaledBitmap(bmap, 1024, nh, true); 
     int bitmapWidthMain = bitmapThumbnail.getWidth(); 
     int bitmapHeightMain = bitmapThumbnail.getHeight(); 
     return bitmapThumbnail; 
    } 
    private void showBrushSizeChooserDialog() { 
     final Dialog brushDialog = new Dialog(this); 
     brushDialog.setContentView(R.layout.dialog_brush_size); 
     brushDialog.setTitle("Brush size:"); 
     ImageButton smallBtn = (ImageButton) brushDialog.findViewById(R.id.small_brush); 
     smallBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mDrawingView.setBrushSize(smallBrush); 
       mDrawingView.setLastBrushSize(smallBrush); 
       brushDialog.dismiss(); 
      } 
     }); 
     ImageButton mediumBtn = (ImageButton) brushDialog.findViewById(R.id.medium_brush); 
     mediumBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mDrawingView.setBrushSize(mediumBrush); 
       mDrawingView.setLastBrushSize(mediumBrush); 
       brushDialog.dismiss(); 
      } 
     }); 

     ImageButton largeBtn = (ImageButton) brushDialog.findViewById(R.id.large_brush); 
     largeBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mDrawingView.setBrushSize(largeBrush); 
       mDrawingView.setLastBrushSize(largeBrush); 
       brushDialog.dismiss(); 
      } 
     }); 
     mDrawingView.setErase(false); 
     brushDialog.show(); 
    } 

    private void showEraserSizeChooserDialog() { 
     final Dialog brushDialog = new Dialog(this); 
     brushDialog.setTitle("Eraser size:"); 
     brushDialog.setContentView(R.layout.dialog_brush_size); 
     ImageButton smallBtn = (ImageButton) brushDialog.findViewById(R.id.small_brush); 
     smallBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mDrawingView.setErase(true); 
       mDrawingView.setBrushSize(smallBrush); 
       brushDialog.dismiss(); 
      } 
     }); 
     ImageButton mediumBtn = (ImageButton) brushDialog.findViewById(R.id.medium_brush); 
     mediumBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mDrawingView.setErase(true); 
       mDrawingView.setBrushSize(mediumBrush); 
       brushDialog.dismiss(); 
      } 
     }); 
     ImageButton largeBtn = (ImageButton) brushDialog.findViewById(R.id.large_brush); 
     largeBtn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mDrawingView.setErase(true); 
       mDrawingView.setBrushSize(largeBrush); 
       brushDialog.dismiss(); 
      } 
     }); 
     brushDialog.show(); 
    } 

    private void showNewPaintingAlertDialog() { 
     AlertDialog.Builder newDialog = new AlertDialog.Builder(this); 
     newDialog.setTitle("New drawing"); 
     newDialog.setMessage("Start new drawing (you will lose the current drawing)?"); 
     newDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       mDrawingView.startNew(); 
       dialog.dismiss(); 
      } 
     }); 
     newDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.cancel(); 
      } 
     }); 
     newDialog.show(); 
    } 

    private void showSavePaintingConfirmationDialog() { 
     AlertDialog.Builder saveDialog = new AlertDialog.Builder(this); 
     saveDialog.setTitle("Save drawing"); 
     saveDialog.setMessage("Save drawing to device Gallery?"); 
     saveDialog.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       //save drawing 
       mDrawingView.setDrawingCacheEnabled(true); 
       String imgSaved = MediaStore.Images.Media.insertImage(
         getContentResolver(), mDrawingView.getDrawingCache(), 
         UUID.randomUUID().toString() + ".png", "drawing"); 
       if (imgSaved != null) { 
        Toast savedToast = Toast.makeText(getApplicationContext(), 
          "Drawing saved to Gallery!", Toast.LENGTH_SHORT); 
        savedToast.show(); 
       } else { 
        Toast unsavedToast = Toast.makeText(getApplicationContext(), 
          "Oops! Image could not be saved.", Toast.LENGTH_SHORT); 
        unsavedToast.show(); 
       } 
       // Destroy the current cache. 
       mDrawingView.destroyDrawingCache(); 
      } 
     }); 
     saveDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.cancel(); 
      } 
     }); 
     saveDialog.show(); 
    } 

} 

Manifest.xml :

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

이 시도 코드, 그것은 다른 브러시 크기, 지우개 및 텍스트에 다른 색상으로 텍스트를 그리는 색상 선택기와 이미지에 그리기 텍스트에 대한 브러시를 포함하고 예, 갤러리에 텍스트로 이미지를 저장합니다.

이로써, 내가 부착하고 스크린 샷,

enter image description here

희망, 그것은 당신을 도울 것입니다. :)

0

또한 FingerPaint API를 사용하는 것과 같은 방법이 있습니다. 여기에서 해당 다운로드 코드에 대한

, 이미지 뷰를 사용하지만 갤러리에서 이미지를 선택하고 그리기보기로 설정하고 페인트하지 않습니다

"https://github.com/nikt/Finger-Paint" 

예, 그것은 또한 image.You 수 또한 이것을 시도하십시오.