Копирование рисунка

Копирование рисунка

Библиотека .NET Compact Framework 1.0 не поддерживает метод System.Drawing.Image.Clone, позволяющий создать точную копию картинки. Это ограничение легко обходится с помощью создания собственных методов. Кроме того, можно расширить возможности метода и добавить функциональность, позволяющую копировать часть картинки. Соответствующий код приведен в листинге 6.17.

Листинг 6.17

// Копируем всю картинку

protected Bitmap CopyBitmap(Bitmap source) {

 return new Bitmap(source);

}

// Копируем часть картинки

protected Bitmap CopyBitmap(Bitmap source, Rectangle part) {

 Bitmap bmp = new Bitmap(part.Width, part.Height);

 Graphics g = Graphics.FromImage(bmp);

 g.DrawImage(source, 0, 0, part, GraphicsUnit.Pixel);

 g.Dispose();

 return bmp;

}

private void button1_Click(object sender, EventArgs e) {

 Graphics g = CreateGraphics();

 Bitmap myBMP = new Bitmap(@"windowsanner.gif");

 // Половина ширины картинки

 int left = myBMP.Size.Width / 2;

 // Копируем всю картинку Bitmap

 clone = CopyBitmap(myBMP);

 // копируем левую часть картинки

 Bitmap part =

  CopyBitmap(myBMP, new Rectangle(0, 0, left, myBMP.Size.Height));

 // Выводим три картинки по вертикали:

 // источник, копию и копию левой части

 int y = 10;

 // картинка-источник

 g.DrawImage(myBMP, 10, y);

 y += myBMP.Height + 10;

 // картинка-копия

 g.DrawImage(clone, 10, y);

 y += clone.Height + 10;

 // копия левой части картинки

 g.DrawImage(part, 10, y);

 y += part.Height + 10;

 g.Dispose();

}

private void button2_Click(object sender, EventArgs e) {

 Graphics g = CreateGraphics();

 Bitmap myBMP = new Bitmap(@"windowsanner.gif");

 g.Clear(Color.White);

 int left = myBMP.Size.Width / 2; // Копия картинки

 Bitmap clone = (Bitmap)myBMP.Clone();

 int y = 10;

 g.DrawImage(myBMP, 10, y);

 y += myBMP.Height + 10;

 g.DrawImage(clone, 10, y);

 y += clone.Height + 10;

 g.Dispose();

}

В этом примере создаются две перегруженные версии метода CopyImage. При помощи этого метода можно копировать картинку или ее часть. Для сравнения в примере было показано, как можно скопировать картинку с помощью метода Clone, доступного в .NET Compact Framework 2.0. Результат работы соответствующего приложения показан на рис. 6.4.

Рис. 6.4. Копирование картинки разными способами