C# wypełnanie kolorem - mały problem

0

Witam , proszę o wskazówkę , którą część programu powinienem zmodyfikować lub co dodać aby uzyskać efekt jak na 2 obrazku.

user image

Pierwszy obrazek wyświetla mi się w tym momencie po skompilowaniu programu , co powinienem zmienić żeby uzyskać efekt jak na 2 obrazku?

Z góry dziękuję za odpowiedź.

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

namespace dywangraf
{
    /// <summary>
    /// Description of MainForm.
    /// </summary>
    public partial class MainForm : Form
    {
        public MainForm()
        {
            //
            // The InitializeComponent() call is required for Windows Forms designer support.
            //
            InitializeComponent();
           
            //
            // TODO: Add constructor code after the InitializeComponent() call.
            //
        }
       
        void MainFormPaint(object sender, PaintEventArgs e)
        {
           
                Graphics g = e.Graphics;
               
               
                for(int x=0;x<this.ClientSize.Width;x++)
                    for(int y=0;y<this.ClientSize.Height;y++)
               
           
               
                {
                    int R=(int) (255*Math.Sin(x/100));
                    int G=(int) (255*Math.Sin(y/100));
                   
                   
                    Pen pioro = new Pen(Color.FromArgb(R,G,0),1);
                   
                    g.DrawLine(pioro, x,y,x+1,y);
                   
       
                }
                base.OnPaint (e);
            }
       
        void MenuStrip1ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
           
           
           
            }
           
        }
        } 
0

x/100

y/100

Błędnie wykonujesz dzielenie CAŁKOWITE !
Napisz:
x * 0.01
y * 0.01

0

Dziękuje bardzo :d działa

0

Jeśli można jeszcze jedno pytanie W jaki sposób moge skonfigurować MenuStrip żebym miał możliwość wyboru wypelnienienia które ma sie narysowac ?

void MenuStrip1ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            switch()
            case 0:
            
            
            break;
            
             case 1:
            
            break;
        }
0

Zrób tego switch'a w MainFormPaint, a w MenuStrip1ItemClicked tylko odmaluj formę (Invalidate).

0

czy mógłbyś mi pomóc jak powinna wyglądać instrukcja switch ? mam nikłe pojęcie o programowaniu.
za rysowanie różnych wzorów odpowiada ten fragment "Pen pioro = new Pen(Color.FromArgb(R,G,0),0);" czy w każdym z case`ow wystarczy umieścić ten fragment ze zmienionymi wartościami ?

0

Jeśli tylko wartości się zmieniają to umieść je w tablicy np:

    public partial class MainForm
    {
        //     4 schematy kolorów
        //     każdy schemat opisuje 3 składowe RGB
        //     każda składowa zależy od 2 współrzędnych XY
        static readonly double[, ,] kolory = new double[4, 3, 2]
        {
            //pierwszy schemat odpowiada twojemu pierwszemu 
            //ustawieniu: r=sin(0.01*x), g=sin(0.01*y), b = sin(0)

            {   /* X  |  Y */
                {0.01, 0.00}, //R
                {0.00, 0.01}, //G
                {0.00, 0.00}  //B
            },
            {   /* X  |  Y */
                {0.00, 0.00}, //R
                {0.02, 0.01}, //G
                {0.01, 0.00}  //B
            },
            {   /* X  |  Y */
                {0.02, 0.00}, //R
                {0.01, 0.00}, //G
                {0.00,-0.01}  //B
            },
            {   /* X  |  Y */
                {0.00,-0.02}, //R
                {0.00, 0.03}, //G
                {0.00, 0.00}  //B
            }
        };

        void MainFormPaint()
        {
            //indeksy poszczególnych składowych
            const int ix = 0;
            const int iy = 1;
            const int ir = 0;
            const int ig = 1;
            const int ib = 2;

            //tu sobie wstaw indeks wybranego schematu kolorów
            int i = numer_schematu_kolorów; 

            Graphics g = e.Graphics;

            //maluj tylko po obszarze, który ma być odmalowany (e.ClipRectangle)
            for (int x = e.ClipRectangle.Left; x < e.ClipRectangle.Right; x++) 
                for (int y = e.ClipRectangle.Top; y < e.ClipRectangle.Bottom; y++)
                {
                    int R = (int)(255 * Math.Sin(x * kolory[i, ir, ix] + y * kolory[i, ir, iy]));
                    int G = (int)(255 * Math.Sin(x * kolory[i, ig, ix] + y * kolory[i, ig, iy]));
                    int B = (int)(255 * Math.Sin(x * kolory[i, ib, ix] + y * kolory[i, ib, iy]));

                    Pen pioro = new Pen(Color.FromArgb(R, G, B), 1);

                    g.DrawLine(pioro, x, y, x + 1, y);
                }
            base.OnPaint(e);
        }
    }
0

dziękuję :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1