Si lo piensas bien, el número de primitivas necesarias para dibujar la notación musical es bastante pequeño, especialmente si no te gusta demasiado. Todo lo que necesita básicamente es:
- líneas verticales (nota tallos)
- líneas horizontales (líneas de personal)
- óvalos plenos y descritos (notas que representan)
- Sharp y Pisos Ya se proporcionan para usted con # yb
Hay algunos símbolos más elegantes que omití, como los agudos, las marcas de las cuerdas de los graves, pero los que podría buscar con T y B o encontrar una fuente más elegante que pueda funcionar.
Muy simple, código de ejemplo para empezar:
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
public partial class MusicForm : Form
{
public MusicForm()
{
InitializeComponent();
}
private int _staffHght = 15;
private int _noteHght = 12;
private int _noteWdth = 20;
private Pen _notePen = new Pen(Color.Black, 2);
private Brush _noteBrush = Brushes.Black;
private void musicPanel_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.SmoothingMode = SmoothingMode.HighQuality;
// draw some staff lines
for (int i = 1; i < 6; i++)
g.DrawLine(Pens.Black, 0, i * _staffHght, musicPanel.Width, i * _staffHght);
// draw four semi-random full and quarter notes
g.DrawEllipse(_notePen, 10, 2 * _staffHght, _noteWdth, _noteHght);
g.DrawEllipse(_notePen, 50, 4 * _staffHght, _noteWdth, _noteHght);
g.FillEllipse(_noteBrush, 100, 2 * _staffHght, _noteWdth, _noteHght);
g.FillEllipse(_noteBrush, 150, 4 * _staffHght, _noteWdth, _noteHght);
}
}
Esta función pintura sería, por supuesto, tiene que ser mucho más dinámica: lleno de bucles en sus colecciones de primitivas ...
Wow buen proyecto. ¡Suena interesante! –
+1 para el hijo :-) – chiccodoro
He aceptado la respuesta Unicode, solo hay algo que todavía estoy tratando de poner en práctica es cómo voltear la negra al revés. – JeffJak