Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp_Graphics.doc
Скачиваний:
20
Добавлен:
16.11.2019
Размер:
3.1 Mб
Скачать

Создание фигурной формы Windows Forms

Пример создает форму в виде эллипса, размеры которого можно изменять.

Пример

-------

Компиляция кода

Для этого примера требуются следующие компоненты.

  • Ссылки на пространства имен System.Windows.Forms и System.Drawing.

Этот пример переопределяет метод OnPaint, чтобы изменить фигуру формы. Чтобы использовать этот код, следует скопировать объявление метода, а также код рисования внутри метода.

How to: Copy Pixels for Reducing Flicker in Windows Forms

When you animate a simple graphic, users can sometimes encounter flicker or other undesirable visual effects. One way to limit this problem is to use a "bitblt" process on the graphic. Bitblt is the "bit-block transfer" of the color data from an origin rectangle of pixels to a destination rectangle of pixels.

With Windows Forms, bitblt is accomplished using the CopyFromScreen method of the Graphics class. In the parameters of the method, you specify the source and destination (as points), the size of the area to be copied, and the graphics object used to draw the new shape.

In the example below, a shape is drawn on the form in its Paint event handler. Then, the CopyFromScreen method is used to duplicate the shape.

Note:

Setting the form's DoubleBuffered property to true will make graphics-based code in the Paint event be double-buffered. While this will not have any discernable performance gains when using the code below, it is something to keep in mind when working with more complex graphics-manipulation code.

Example

private void Form1_Paint(System.Object sender,

System.Windows.Forms.PaintEventArgs e)

{

e.Graphics.FillEllipse(Brushes.DarkBlue, new

Rectangle(10,10,60,60));

e.Graphics.FillRectangle(Brushes.Khaki, new

Rectangle(20,30,60,10));

e.Graphics.CopyFromScreen(new Point(10, 10), new Point(100, 100),

new Size(70, 70));

}

Compiling the Code

The code above is run in the form's Paint event handler so that the graphics persist when the form is redrawn. As such, do not call graphics-related methods in the Load event handler, because the drawn content will not be redrawn if the form is resized or obscured by another form.

Копирование пикселов для уменьшения эффекта дрожания изображения в Windows Forms

При создании простых анимированных изображений могут появиться мерцание или другие нежелательные визуальные эффекты. Один из способов ограничения этих эффектов — применение к изображению процесса bitblt. Функция Bitblt выполняет перемещение набора битов с информацией о цвете из исходного прямоугольника точек в конечный прямоугольник.

В Windows Forms для реализации функции bitblt используется метод CopyFromScreen класса Graphics. В списке параметров метода указываются координаты исходной и конечной областей (в виде точек), размер копируемой области и графический объект, с помощью которого рисуется новая форма.

В следующем примере рисование фигуры на форме происходит в обработчике события Paint этой формы. После этого фигура копируется с помощью метода CopyFromScreen.

Примечание.

Установка значения свойства DoubleBuffered формы равным true включает двойную буферизацию для кода обработки графики в обработчике события Paint. Хотя использование такого подхода в приведенном ниже коде не дает заметного выигрыша в производительности, о нем все равно стоит помнить при работе с кодом, управляющим более сложными графическими конструкциями.

Пример

------