4.2.2 기존 이미지에 그리기
18548 단어 이미지
다음은 완전한 예시를 소개한다.
1 package com.nthm.androidtest;
2
3 import android.app.Activity;
4 import android.content.Intent;
5 import android.graphics.Bitmap;
6 import android.graphics.BitmapFactory;
7 import android.graphics.Canvas;
8 import android.graphics.Color;
9 import android.graphics.Matrix;
10 import android.graphics.Paint;
11 import android.net.Uri;
12 import android.os.Bundle;
13 import android.view.Display;
14 import android.view.MotionEvent;
15 import android.view.View;
16 import android.view.View.OnClickListener;
17 import android.view.View.OnTouchListener;
18 import android.widget.Button;
19 import android.widget.ImageView;
행사는 온클릭 리스트와 온터치 리스트가 이뤄진다.OnClickListener는 단추의 클릭 이벤트에 응답할 수 있도록 합니다.OnTouchListener는 터치스크린을 사용하여 ImageView에 그릴 수 있습니다.
1 public class ChoosePictureDraw extends Activity implements OnTouchListener,
2 OnClickListener {
두 가지 주요 UI 요소가 있습니다.첫 번째는 ImageView로, 그릴 비트맵 객체를 표시합니다.두 번째는 갤러리 프로그램에서 그림을 선택하기 위해 누르는 단추입니다.
1 private ImageView chooseImageView;
2 private Button choosePicture;
비트맵 객체가 두 개 필요합니다.첫 번째는 선택한 이미지의 배율 조정 버전을 포함하고 두 번째는 가변 버전입니다.첫 번째 비트맵 객체를 두 번째 비트맵 객체에 그린 다음 그 위에 그립니다.
1 private Bitmap bmp;
2 private Bitmap alteredBitmap;
3 private Canvas canvas;
4 private Paint paint;
5 private Matrix matrix;
6 @Override
7 protected void onCreate(Bundle savedInstanceState) {
8 super.onCreate(savedInstanceState);
9 setContentView(R.layout.choosepicturedraw);
10 chooseImageView=(ImageView) findViewById(R.id.ChooseImageView);
11 choosePicture=(Button) findViewById(R.id.ChoosePictureButton);
ImageView와 버튼에 대한 참조를 얻은 후 각 이벤트(Onclick 및 OnTouch)의 모니터를 활동으로 설정합니다.
1 choosePicture.setOnClickListener(this);
2 chooseImageView.setOnTouchListener(this);
3 }
onClick 방법은 다음과 같습니다.Gallery 응용 프로그램에서 이미지를 선택할 수 있도록 표준 의도를 사용합니다.
1 @Override
2 public void onClick(View v) {
3 Intent choosePictureIntent=new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
4 startActivityForResult(choosePictureIntent, 0);
5 }
사용자가 이미지를 선택한 후 onActivityResult 메서드를 호출합니다.선택한 이미지를 비트맵 객체에 로드하고 화면 크기로 확대/축소합니다.
1 @Override
2 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
3 super.onActivityResult(requestCode, resultCode, data);
4 if(resultCode==RESULT_OK){
5 Uri imageFileUri=data.getData();
6 Display currentDisplay=getWindowManager().getDefaultDisplay();
7 int dw=currentDisplay.getWidth();
8 int dh=currentDisplay.getHeight();
9 try{
10 BitmapFactory.Options bmpBitmapFactoryOptions=new BitmapFactory.Options();
11 bmpBitmapFactoryOptions.inJustDecodeBounds=true;
12 bmp=BitmapFactory.decodeStream(getContentResolver().openInputStream(imageFileUri), null, bmpBitmapFactoryOptions);
13 int heightRatio=bmpBitmapFactoryOptions.outHeight;
14 int widthRatio=bmpBitmapFactoryOptions.outWidth;
15 if(heightRatio>1&&widthRatio>1){
16 if(heightRatio>widthRatio){
17 bmpBitmapFactoryOptions.inSampleSize=heightRatio;
18 }else{
19 bmpBitmapFactoryOptions.inSampleSize=widthRatio;
20 }
21 }
22 bmpBitmapFactoryOptions.inJustDecodeBounds=false;
23 bmp=BitmapFactory.decodeStream(getContentResolver().openInputStream(imageFileUri), null, bmpBitmapFactoryOptions);
비트맵 대상을 불러온 후, 가변적인 비트맵 대상alteredBitmap을 만들고, 그 안에 첫 번째 비트맵 대상을 그립니다.
1 alteredBitmap=Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), bmp.getConfig());
2 canvas=new Canvas(alteredBitmap);
3 paint=new Paint();
4 paint.setColor(Color.GREEN);
5 paint.setStrokeWidth(5);
6 matrix=new Matrix();
7 canvas.drawBitmap(bmp, matrix, paint);
8 chooseImageView.setImageBitmap(alteredBitmap);
9 chooseImageView.setOnTouchListener(this);
10 }catch(Exception e){
11
12 }
13 }
14 }
지금은 단지 이전의 같은 방식으로 온터치를 실현하는 방법일 뿐이다.빈 비트맵 Canvas 객체와는 다르게 기존 이미지 위에 그려집니다.
1 private float downx=0;
2 private float downy=0;
3 private float upx=0;
4 private float upy=0;
5 @Override
6 public boolean onTouch(View v, MotionEvent event) {
7 switch (event.getAction()) {
8 case MotionEvent.ACTION_DOWN:
9 downx=event.getX();
10 downy=event.getY();
11 break;
12 case MotionEvent.ACTION_MOVE:
13 upx=event.getX();
14 upy=event.getY();
15 canvas.drawLine(downx, downy, upx, upy, paint);
16 chooseImageView.invalidate();
17 downx=upx;
18 downy=upy;
19 break;
20 case MotionEvent.ACTION_UP:
21 upx=event.getX();
22 upy=event.getY();
23 canvas.drawLine(downx, downy, upx, upy, paint);
24 chooseImageView.invalidate();
25 break;
26 case MotionEvent.ACTION_CANCEL:
27
28 break;
29 default:
30 break;
31 }
32 return true;
33 }
34
35 }
다음은 위 활동의 레이아웃 XML 파일입니다.이것은 표준 LinearLayout에서 이 ImageView와 단추를 지정합니다.
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:layout_width="match_parent"
3 android:layout_height="match_parent"
4 android:orientation="vertical"
5 >
6 <Button
7 android:id="@+id/ChoosePictureButton"
8 android:layout_width="fill_parent"
9 android:layout_height="wrap_content"
10 android:text="Choose Picture"/>
11 <ImageView
12 android:id="@+id/ChooseImageView"
13 android:layout_width="wrap_content"
14 android:layout_height="wrap_content"
15 android:contentDescription="@string/app_name"/>
16 </LinearLayout>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【초보자용】 화상의 가공이나 압축 등에 편리한 WEB 툴 4선WEB 개발 시에는 화상의 가공이나 압축 등 다양한 처리가 필요합니다. Adobe 소프트웨어를 가지고 있다면 거기까지 어려움이 적지만 Adobe 포토샵이 없어도 WEB상에서 가공·압축을 할 수 있는 툴을 소개. 제작...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.