2011-03-22 4 views
0

Mon projet concerne le traitement d'image dans android.J'ai un bitmap que j'ai chargé à partir d'un fichier de ressources (une image PNG). Je veux le dessiner. Mais je ne pouvais pas. Voici mon extrait de code:Dessin bitmap dans Android?

mB = BitmapFactory.decodeResource(getResources(), R.drawable.picture); 
Canvas c = new Canvas(mB); 
Paint p = new Paint(); 
c.drawBitmap(mB,0,0,p); 

il ne fonctionne pas. Est-ce que le code est vrai? Est-ce qu'il y a autre chose que je dois faire?

Répondre

2

Vous devez utiliser un ImageView à la place et le charger par

imageView.setImageResource(R.drawable.picture); 

Si vous voulez dessiner manuellement avec une toile, vous devez utiliser une toile qui est passé dans une méthode draw() et mettre en œuvre une vue personnalisée .

mise à jour pour ajouter par exemple CustomView:

public class CustomView extends View { 
    private Paint mPaint; 
    private Drawable mDrawable; 

    public CustomView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     mPaint = new Paint(); 
     mDrawable = context.getResources().getDrawable(R.drawable.some_drawable); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 
     mDrawable.draw(canvas); 
    } 
} 
+0

soryy, je suis nouveau dans android.Je ne veux pas utiliser ImageView parce que, après le traitement de l'image, je ne peux pas dessiner avec ImageView. Je veux le dessiner manuellement. Pouvez-vous expliquer plus? – lakk

+0

mais je dois utiliser bitmap? – lakk

0

Il y a deux choses qui vous manquent. Tout d'abord, je pense que vous ne comprenez pas le constructeur Canvas (Bitmap b). Le bitmap transmis est celui que le canevas dessine dans. Cela pourrait être juste un nouveau bitmap que vous avez construit. Deuxièmement, il est recommandé d'utiliser le canevas qui vous est transmis dans la méthode onDraw de votre View. Vraisemblablement que View est un de votre activité, soit récupéré à partir de votre mise en page XML via findViewById ou construit et passé à setContentView dans la méthode onCreate() de l'activité. Donc, vous devrez sous-classer Afficher et remplacer la méthode onDraw pour que votre dessin soit terminé. Quelque chose comme:

public class MyView extends View { 
    @Override 
    public void onDraw (Canvas c) { 
    Bitmap mB = BitmapFactory.decodeResource(this.getContext().getResources(), R.drawable.picture); 
    c.drawBitmap(mB, 0, 0, null); 
    } 
} 

Ensuite, dans votre activité, vous devez créer une instance de votre nouvelle vue et le transmettre à l'activité via setContentView:

public class MyActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mv = new MyView(this); 
    setContentView(mv); 
} 

Vous pouvez appeler la place setContentView (View v, ViewGroup.LayoutParameters lp) surcharge si vous voulez configurer LayoutParameters.

Je n'ai pas testé tout cela, mais il devrait au moins vous mettre sur la bonne voie.