Графика в c# - Учителско портфолио · 2018. 5. 13. ·...
Embed Size (px)
TRANSCRIPT

Графика в C#ВЪВЕДЕНИЕ В ГРАФИКАТА НА C#
ИНФОРМАТИКА - 9 КЛАС, ВИДОЛОВА

Компютърна графикаМонитор разделителна способност – dpi (dot pen inch) - количество пиксели на инч
ИНФОРМАТИКА - 9 КЛАС, ВИДОЛОВА
19-инчов екран (4:3): 1280 x 1024 пиксела20-инчов екран (стандартно съотношение): 1600 x 1200 пиксела22-инчов екран 16:9): 1680 x 1050 пиксела24-инчов екран (широкоекранен): 1900 x 1200 пиксела

Графични форматиРАСТЕРНИ - BITMAP
Всеки пиксел има цвят
Обемисти файлове
Paint – bmp,
ВЕКТОРНИ - WMF /WINDOWS METAFILE FORMAT/
Oтделни графични елементи различни геометрични фигури, представени с математическо описание.
ИНФОРМАТИКА - 9 КЛАС, ВИДОЛОВА

Създаване на Windows приложение с графика using System.Drawing;
метод за обработка на събитието OnPaint
protected override void OnPaint(PaintEventArgs e)
{ Graphics g = e.Graphics; }
ИНФОРМАТИКА - 9 КЛАС, ВИДОЛОВА

Чертожно полеДЕКАРТОВА КООРДИНАТНА СИСТЕМА ЕКРАННА КООРДИНАТНА СИСТЕМА
ИНФОРМАТИКА - 9 КЛАС, ВИДОЛОВА
(0,0)c
r

Реално чертожно поле на формата
WindowsState - размер на формата
Текущи стойности на полето ClientSize.Width - ширина
ClientSize.Height - височина на чертожното поле
ИНФОРМАТИКА - 9 КЛАС, ВИДОЛОВА

Създаване на писалка Синтаксис
Pen p = new Pen(<цвят>, <дебелина>);
Примери
Pen p = new Pen(Color. Red,1);
Pen p = new Pen(Color.FromArgb(49,226,29),2);с избор на интензитет /0-255/ RGB
ИНФОРМАТИКА - 9 КЛАС, ВИДОЛОВА

Фон на чертожното поле - BackColor
g.Clear(Color.Red);
g.Clear(Color.FromArgb(20,140,60));
ИНФОРМАТИКА - 9 КЛАС, ВИДОЛОВА

Генериране на случаен цвят на форматаprotected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
int a = 255,freq=10;
Random c = new Random();
for (int i = 1; i <= 40; i++)
{ g.Clear(Color.FromArgb(c.Next()%a,c.Next()%a,c.Next()%a));
System.Threading.Thread.Sleep(1000 / 10);
}
}
ИНФОРМАТИКА - 9 КЛАС, ВИДОЛОВА
Методът забавя изпълнението на следващия оператор за времето в
милисекунди.

Изчертаване на права линия - метод DrawLine Синатаксис
void DrawLine(Pen p, int x1, int y1, int x2, int y2)
Пример:
Pen p = new Pen(Color.Black, 0);
g.DrawLine(p, 0, 0, 15, 15);
g.DrawLine(p, 15, 15, 0, 0);
ИНФОРМАТИКА - 9 КЛАС, ВИДОЛОВА
Еднакъв резултат

Изчертайте равностранен триъгълник
int x1=200, y1=500, side=200;int x2 = x1 + side, y2 = y1;int x3 = (x1 + x2) / 2;int h = (int)(side * Math.Sqrt(3) / 2); y3 = y1 - h;
g.DrawLine(p, x1, y1, x2, y2);g.DrawLine(p, x2, y2, x3, y3);g.DrawLine(p, x3, y3, x1, y1);
ИНФОРМАТИКА - 9 КЛАС, ВИДОЛОВА
(x1,y1)
side
side/2 side/2
side
(x2, y2)
(x3,y3)
side. √3 / 2

protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
Pen p = new Pen(Color.Black, 2);
int side=200, x1=200, y1=500, x2, y2, x3, y3;
x2 = x1 + side; y2 = y1; x3 = (x1 + x2) / 2;
int h = (int)(side * Math.Sqrt(3) / 2);
y3 = y1 - h;
g.DrawLine(p, x1, y1, x2, y2);
g.DrawLine(p, x2, y2, x3, y3);
g.DrawLine(p, x3, y3, x1, y1);
}
ИНФОРМАТИКА - 9 КЛАС, ВИДОЛОВА

Задача 1. Eкспериментирайте с програмния код на решената в урока задача, катопроменяте големината на страната в side и началното положение на координатите х1 и у1. Променя ли се при това размерът на триъгълника и неговото местоположение? А остава ли триъгълникът равностранен?
Задача 2. Какво трябва да се промени в кода на тази програма, за да се изчертаетриъгълникът обърнат надолу?
ИНФОРМАТИКА - 9 КЛАС, ВИДОЛОВА

protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
Pen p = new Pen(Color.Black, 2);
int side = 200, x1, y1, x2, y2, x3, y3;
for ( x1 = 0, y1 = 500; x1 <= 800; x1 += 20, y1 -= 10)
{
x2 = x1 + side; y2 = y1;
x3 = (x1 + x2) / 2;
int h = (int)(side * Math.Sqrt(3) / 2);
y3 = y1 - h;
g.DrawLine(p, x1, y1, x2, y2);
g.DrawLine(p, x2, y2, x3, y3);
g.DrawLine(p, x3, y3, x1, y1);
}
}
ИНФОРМАТИКА - 9 КЛАС, ВИДОЛОВА

ИНФОРМАТИКА - 9 КЛАС, ВИДОЛОВА
protected override void OnPaint(PaintEventArgs e){
Graphics g = e.Graphics;Pen p = new Pen(Color.Black, 2);int side = 200, x1,y1=500, x2, y2=500, x3, y3;for (x1 = 0; x1 <= 800; x1 += 20){
x2 = x1 + side; x3 = (x1 + x2) / 2;int h = (int)(side * Math.Sqrt(3) / 2);y3 = y1 - h;g.DrawLine(p, x1, y1, x2, y2);g.DrawLine(p, x2, y2, x3, y3);g.DrawLine(p, x3, y3, x1, y1);
}}

ИНФОРМАТИКА - 9 КЛАС, ВИДОЛОВА
protected override void OnPaint(PaintEventArgs e){
Graphics g = e.Graphics;Pen p = new Pen(Color.Black, 2);int side = 200, x1,y1=500, x2, y2=500, x3, y3;for (x1 = 0; x1 <= 800; x1 += side){
x2 = x1 + side; x3 = (x1 + x2) / 2;int h = (int)(side * Math.Sqrt(3) / 2);y3 = y1 - h;g.DrawLine(p, x1, y1, x2, y2);g.DrawLine(p, x2, y2, x3, y3);g.DrawLine(p, x3, y3, x1, y1);
}}

Изчертайте 10 хоризонтални линии с дължина 500, разположениплътно едно до друга, със случайна дебелина и цвят.
ИНФОРМАТИКА - 9 КЛАС, ВИДОЛОВА
Graphics g = e.Graphics;Random r = new Random();int h = 100, red, green, blue;for (int i = 1; i <= 10; i++){ int w = r.Next() % 20+10;red = r.Next() % 256;green = r.Next() % 256;blue = r.Next() % 256;Pen p = new Pen(Color.FromArgb(red,green,blue),w);g.DrawLine(p, 100, h, 600, h);h = h + w;