Comment créer ce type de pinceau pour peindre dans Android

Possible duplicate Comment faire une brosse personnalisée pour la toile dans Android?

Bonjour les amis,

Je suis trop coincé pour créer ce type de brosse pour l'application de peinture, mais je n'ai rien trouvé à ce sujet.

Je suis novice pour la peinture / la toile, donc je n'ai pas de connaissances à ce sujet pour la base que j'ai complété, mais pour l'effet comme la création de la brosse, je n'ai rien à voir avec la façon de la créer. Quelqu'un a-t-il un exemple ou un code pour cela?

J'ai besoin de ce type de pinceau pour mon application, un exemple simple de compréhension:

Entrez la description de l'image ici

Je vous remercie.

  • Retourner une toile Android
  • Dessiner une ligne avec une certaine largeur de pixel
  • Créez Bitmap à partir de byteArray dans Android
  • Vue personnalisée drawArc, détecte le contact de l'utilisateur sur le chemin de dessin de l'arc
  • Comment faire pivoter un canevas à un point spécifique en utilisant android.graphics.Camera.rotateX (angle)
  • Bitmap.compress renvoie false pour l'image dessinée
  • Comment reconnaître le caractère dessiné sur toile
  • Android: faites pivoter la toile autour du centre de l'écran
  • 2 Solutions collect form web for “Comment créer ce type de pinceau pour peindre dans Android”

    Je suppose qu'il n'y a pas de moyen facile. J'ai trouvé cette discussion et particulièrement la publication suivante est intéressante:

    Les graphiques informatiques professionnels ne sont jamais faciles. C'est pourquoi il y a tellement de gens qui s'attaquent vraiment. Pour aggraver les choses, les techniques professionnelles sont rarement publiées. Je ne sais pas combien d'effort vous souhaitez faire pour l'obtenir, mais je vais vous donner un peu de lumière. Donc, si vous voulez, vous pouvez étudier, développer et obtenir le meilleur moyen. Si cela vous semble trop difficile, laissez-le ici comme une curiosité.

    La manière professionnelle de faire des brosses calligraphiques aujourd'hui est comme ça:

    La courbe maître est lisse car elle est dessinée en fonction de spline (s). Pour obtenir un résultat plus professionnel, construisez deux splines: l'une utilisant les points que vous avez obtenus (par exemple, à partir d'événements de souris) situés sur le spline et un autre en utilisant les points comme les points de contrôle spline. Ainsi, la courbe que vous dessinez est la courbe générée par l'interpolation de ces deux cannelures. De cette façon, vous avez une "courbe principale" à dessiner.

    Vous devriez également avoir une "épaisseur maîtresse" sur laquelle une variation doit être appliquée. Cette variation d'épaisseur est calculée en fonction du résultat souhaité. Le type plus commun de brosse calligraphique ressemble à l'image que vous avez liée: les régions courbes sont généralement plus minces que les droites. C'est le type le plus courant car la plupart des concepteurs obtiennent ce type de résultat lors du dessin avec une tablette, de sorte que les programmes imitent ce comportement. Cet effet en particulier est habituellement calculé en utilisant une fonction basée sur la seconde dérivée de la spline maître. L'amplitude de la variation d'épaisseur peut être une valeur configurable.

    Les pointes de courbes minces et pointues sont faites dans un calcul supplémentaire. Parfois, cela peut être une bonne idée de lisser même les variations d'épaisseur avec des cannelures ou une sorte de "fonction de ceil".

    Si vous avez bien fait, vous avez une courbe épaisse (et bien sûr fermée) entre vos mains. Dessinez-le en utilisant le meilleur algorithme de remplissage que vous pouvez développer. Utilisez un anti-aliasing si vous le pouvez.

    Toutes ces techniques peuvent être calculées en temps réel tandis que l'utilisateur déplace la souris. Plus vous obtenez de points, plus vous effectuez de calcul, mais cela fonctionne bien, car la plupart des calculs que vous avez déjà réalisés sont encore valables. Habituellement, il suffit de reconstruire une petite (dernière) partie.

    Une dernière suggestion: ne jamais faire de lissage 2D à l'aide de méthodes de régression de fonction, à moins que vos points ne représentent vraiment une fonction (vous devez donc garder le "sens mathématique" des points autant que possible). Je ne peux pas imaginer un moyen plus lent de lisser les points qui n'ont pas de sémantique spéciale. La seule exception est lorsque vous avez des points très clairsemés et que l'ordre des entrées n'a pas d'importance, mais ce n'est pas le cas lorsque quelqu'un dessine avec des brosses.

    Vous pouvez obtenir cet effet en dessinant la texture bitmap sur un canevas. J'ai recadré une petite texture de l'image que vous avez partagée et utilisée comme texture en toile:

    Entrez la description de l'image ici

    Image de texture: –

    Entrez la description de l'image ici

    Voici ma classe de vue: –

    import java.util.ArrayList; import java.util.List; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.view.MotionEvent; import android.view.View; import com.serveroverload.dali.R; public class CanvasBrushDrawing extends View { private Bitmap mBitmapBrush; private Vector2 mBitmapBrushDimensions; private List<Vector2> mPositions = new ArrayList<Vector2>(100); private static final class Vector2 { public Vector2(float x, float y) { this.x = x; this.y = y; } public final float x; public final float y; } public CanvasBrushDrawing(Context context) { super(context); // load your brush here mBitmapBrush = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher); mBitmapBrushDimensions = new Vector2(mBitmapBrush.getWidth(), mBitmapBrush.getHeight()); setBackgroundColor(0xffffffff); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); for (Vector2 pos : mPositions) { canvas.drawBitmap(mBitmapBrush, pos.x, pos.y, null); } } @Override public boolean onTouchEvent(MotionEvent event) { int action = event.getAction(); switch (action) { case MotionEvent.ACTION_MOVE: final float posX = event.getX(); final float posY = event.getY(); mPositions.add(new Vector2(posX - mBitmapBrushDimensions.x / 2, posY - mBitmapBrushDimensions.y / 2)); invalidate(); } return true; } } 

    Vous pouvez utiliser cette vue dans votre activité comme ceci: –

     setContentView(new CanvasBrushDrawing(MainActivity.this)); 

    Maintenant, vous avez juste besoin de meilleurs fichiers de texture de votre créateur. J'espère que ça m'a aidé

    Vous pouvez voir le code source complet sur Git repo https://github.com/hiteshsahu/Dali-PaintBox

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.