logo search
CSharp_Graphics

Варианты DrawImage

Один из вариантов метода DrawImage принимает объекты Bitmap и Rectangle. Прямоугольник задает область, в которой должно быть нарисовано изображение. Если размер прямоугольника назначения отличается от размеров исходного изображения, изображение масштабируется, чтобы соответствовать прямоугольнику назначения. В приведенном ниже примере кода демонстрируется три способа рисования одного изображения: рисование без масштабирования, рисование с увеличением и рисование со сжатием.

----------

На приведенном ниже рисунке изображены три полученных изображения.

---------------

Some variations of the DrawImage method have a source-rectangle parameter as well as a destination-rectangle parameter. The source-rectangle parameter specifies the portion of the original image to draw. The destination rectangle specifies the rectangle in which to draw that portion of the image. If the size of the destination rectangle is different from the size of the source rectangle, the picture is scaled to fit the destination rectangle.

The following code example shows how to construct a Bitmap from the file Runner.jpg. The entire image is drawn with no scaling at (0, 0). Then a small portion of the image is drawn twice: once with a compression and once with an expansion.

Bitmap myBitmap = new Bitmap("Runner.jpg");

// One hand of the runner

Rectangle sourceRectangle = new Rectangle(80, 70, 80, 45);

// Compressed hand

Rectangle destRectangle1 = new Rectangle(200, 10, 20, 16);

// Expanded hand

Rectangle destRectangle2 = new Rectangle(200, 40, 200, 160);

// Draw the original image at (0, 0).

myGraphics.DrawImage(myBitmap, 0, 0);

// Draw the compressed hand.

myGraphics.DrawImage(

myBitmap, destRectangle1, sourceRectangle, GraphicsUnit.Pixel);

// Draw the expanded hand.

myGraphics.DrawImage(

myBitmap, destRectangle2, sourceRectangle, GraphicsUnit.Pixel);

The following illustration shows the unscaled image, and the compressed and expanded image portions.

Некоторые варианты метода DrawImage получают в качестве параметров не только конечный, но и исходный прямоугольник. Исходный прямоугольник задает часть исходного изображения, которая должна быть нарисована. Прямоугольник назначения задает прямоугольник, в котором должна быть нарисована эта часть изображения. Если размер прямоугольника назначения отличается от размера исходного прямоугольника, изображение масштабируется, чтобы соответствовать размеру прямоугольника назначения.

Приведенный ниже пример кода демонстрирует создание объекта Bitmap из файла Runner.jpg. Изображение из файла рисуется целиком, без масштабирования, с привязкой к точке с координатами (0, 0). Затем небольшой фрагмент изображения отображается дважды: один раз — со сжатием, второй раз — с увеличением.

---------

На приведенном ниже рисунке изображен немасштабированный рисунок, а также сжатая и увеличенная части рисунка.

-----------------

Coordinate Systems and Transformations

GDI+ provides a world transformation and a page transformation so that you can transform (rotate, scale, translate, and so on) the items you draw. The two transformations also allow you to work in a variety of coordinate systems

Types of Coordinate Systems

GDI+ uses three coordinate spaces: world, page, and device. World coordinates are the coordinates used to model a particular graphic world and are the coordinates you pass to methods in the .NET Framework. Page coordinates refer to the coordinate system used by a drawing surface, such as a form or control. Device coordinates are the coordinates used by the physical device being drawn on, such as a screen or sheet of paper. When you make the call myGraphics.DrawLine(myPen, 0, 0, 160, 80), the points that you pass to the DrawLine method—(0, 0) and (160, 80)—are in the world coordinate space. Before GDI+ can draw the line on the screen, the coordinates pass through a sequence of transformations. One transformation, called the world transformation, converts world coordinates to page coordinates, and another transformation, called the page transformation, converts page coordinates to device coordinates.

Transforms and Coordinate Systems

Suppose you want to work with a coordinate system that has its origin in the body of the client area rather than the upper-left corner. Say, for example, that you want the origin to be 100 pixels from the left edge of the client area and 50 pixels from the top of the client area. The following illustration shows such a coordinate system.