Sakou Posté(e) 16 juin 2011 Share Posté(e) 16 juin 2011 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 More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.