1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| void __fastcall TForm1::DrawBitmap()
{
if(Bitmap != NULL)
{
//On dimensionne le bitmap... ici on lui donne celle de la zone client de la form
int we = ClientWidth;
int he = ClientHeight;
if(Bitmap->Width != we) Bitmap->Width = we;
if(Bitmap->Height != he) Bitmap->Height = he;
//Pour simplifier la rédaction du code
TCanvas *C = Bitmap->Canvas;
//On efface le bitmap
C->Brush->Style = bsSolid;
C->Brush->Color = Color;
C->FillRect(Rect(0,0,we,he));
//On va dessiner les fonctions
C->Pen->Mode = pmCopy;
C->Pen->Style = psSolid;
C->Pen->Color = clSilver; //couleur de l'axe des y
int axe = he / 2;
int amplitude = axe - 4; //amplitude max en y
double s;
//Quelques fonctions, comme par exemple pour l'audio
//ce ne sont que des exemples...
//Signal sinusoïdal
C->Pen->Color = clLime;
C->MoveTo(we,axe); C->LineTo(0,axe);
for(int x = 1; x < we; x++)
{
s = sin(x / 220.5 * Pi) * amplitude;
C->LineTo(x, axe - s);
}
//Signal rectangulaire
C->Pen->Color = clAqua;
C->MoveTo(0,axe);
for(int x = 1; x < we; x++)
{
s = fmod(x / 220.5 * Pi, Pi);
if(s < pi) s = 1.0;
else s = -1.0 ;
s = s * amplitude;
C->LineTo(x, axe - s);
}
//Signal triangulaire
C->Pen->Color = clYellow;
C->MoveTo(0,axe);
for(int x = 1; x < we; x++)
{
s = fmod( pi2 + (x / 220.5 * Pi), Pi);
s = (pi - s) / pi;
if(s < 0.0) s = -s;
s = (1.0 - (s * 2.0)) * amplitude;
C->LineTo(x, axe - s);
}
//Signal Dent de scie
C->Pen->Color = clWhite;
C->MoveTo(0,axe);
for(int x = 1; x < we; x++)
{
s = fmod(x / 220.5 * Pi, Pi);
s = ((pi - s) / pi) * amplitude;
C->LineTo(x, axe - s);
}
//Dessine le bitmap sur la form
Canvas->Draw(0,0,Bitmap);
}
} |
Partager