Aller au contenu

[HELP] Problème d'enregistrement d'un image


Sakou

Recommended Posts

Bonjour à tous,

Je développe actuellement une application qui permet de récupérer la signature d'un client et l'enregistre ensuite au format image pour l'envoyer à mon serveur ensuite.

Le dessin fonctionne bien, c'est parfais. Le problème vient de l'enregistrement : le fichier image est bien crée avec son nom, mais il est complètement noir...

Je pense que c'est un problème sur ma gestion de mon objet Paint, mais je ne vois pas où...

Voici mon code :

public class Signature extends GraphicsActivity {
public Bitmap mBitmap;
private Canvas mCanvas;
private Path mPath;
private Paint mBitmapPaint;
private Paint mPaint;
private MaskFilter mEmboss;
private MaskFilter mBlur;
private static final int ERASE_MENU_ID = Menu.FIRST + 1;
private static final int SAVE_MENU_ID = Menu.FIRST + 2;

@Override
protected void onCreate(Bundle savedInstanceState) {
	mBitmap = Bitmap.createBitmap(320, 480, Bitmap.Config.ARGB_8888);
	super.onCreate(savedInstanceState);
	setContentView(new MyView(this));
	mPaint = new Paint();
	mPaint.setAntiAlias(true);
	mPaint.setDither(true);
	mPaint.setColor(0xFF000000);
	mPaint.setStyle(Paint.Style.STROKE);
	mPaint.setStrokeJoin(Paint.Join.ROUND);
	mPaint.setStrokeCap(Paint.Cap.ROUND);
	mPaint.setStrokeWidth(3);
	mEmboss = new EmbossMaskFilter(new float[] { 1, 1, 1 }, 0.4f, 6, 3.5f);
	mBlur = new BlurMaskFilter(8, BlurMaskFilter.Blur.NORMAL);
}

public class MyView extends View {
	private static final float MINP = 0.25f;
	private static final float MAXP = 0.75f;
	private float mX, mY;
	private static final float TOUCH_TOLERANCE = 4;

	public MyView(Context c) {
		super(c);
		mCanvas = new Canvas(mBitmap);
		mPath = new Path();
		mBitmapPaint = new Paint(Paint.DITHER_FLAG);
	}

	@Override
	protected void onSizeChanged(int w, int h, int oldw, int oldh) {
		super.onSizeChanged(w, h, oldw, oldh);
	}

	@Override
	protected void onDraw(Canvas canvas) {
		canvas.drawColor(0xFFAAAAAA);
		canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
		canvas.drawPath(mPath, mPaint);
	}

	private void touch_start(float x, float y) {
		mPath.reset();
		mPath.moveTo(x, y);
		mX = x;
		mY = y;
	}

	private void touch_move(float x, float y) {
           float dx = Math.abs(x - mX);
           float dy = Math.abs(y - mY);
           if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
           mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
           mX = x;
           mY = y;
           }
	}

	private void touch_up() {
		mPath.lineTo(mX, mY);
		mCanvas.drawPath(mPath, mPaint);
		mPath.reset();
	}

	@Override
	public boolean onTouchEvent(MotionEvent event) {
		float x = event.getX();
		float y = event.getY();

		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN:
			touch_start(x, y);
			invalidate();
			break;
		case MotionEvent.ACTION_MOVE:
			touch_move(x, y);
			invalidate();
			break;
		case MotionEvent.ACTION_UP:
			touch_up();
			invalidate();
			break;
		}
		return true;
	}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
	super.onCreateOptionsMenu(menu);
	menu.add(0, ERASE_MENU_ID, 0, "Effacer").setShortcut('3', 's');
	menu.add(0, SAVE_MENU_ID, 0, "Enregistrer").setShortcut('4', 'z');
	return true;
}

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
	super.onPrepareOptionsMenu(menu);
	return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
	mPaint.setXfermode(null);
	mPaint.setAlpha(0xFF);

	switch (item.getItemId()) {
	case SAVE_MENU_ID:
		String filename = String.valueOf(System.currentTimeMillis());
		ContentValues values = new ContentValues();
		values.put(Images.Media.TITLE, filename);
		values.put(Images.Media.DATE_ADDED, System.currentTimeMillis());
		values.put(Images.Media.MIME_TYPE, "image/jpeg");
		Uri uri = this.getContentResolver().insert(
				Images.Media.EXTERNAL_CONTENT_URI, values);

		try {
			OutputStream outStream = this.getContentResolver()
					.openOutputStream(uri);

			if(mBitmap.compress(Bitmap.CompressFormat.JPEG, 90, outStream))
			{
				outStream.flush();
				outStream.close();
				Log.d("done", "done");
			}
			else Log.d("Error", "Saving problem");


		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return true;

	case ERASE_MENU_ID:
		mPaint = new Paint();
		mPaint.setAntiAlias(true);
		mPaint.setDither(true);
		mPaint.setColor(0xFF000000);
		mPaint.setStyle(Paint.Style.STROKE);
		mPaint.setStrokeJoin(Paint.Join.ROUND);
		mPaint.setStrokeCap(Paint.Cap.ROUND);
		mPaint.setStrokeWidth(3);
		setContentView(new MyView(this));
		return true;
	}
	return super.onOptionsItemSelected(item);
}
}

Edit: dans mon LogCat => je vois bien s'afficher "done" | "done".

Merci d'avance pour votre aide!

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...