C# で画像をトリミングする
-
C#
でGraphics.DrawImage()
メソッドを使用して画像を描画およびトリミングする -
DrawImage()
を 5つのパラメーターで使用してC#
で画像をトリミングする -
DrawImage()
を指定された部分、場所、およびサイズで使用してC#
で画像をトリミングする
この記事では、C# コードを使用して、特定の画像を指定した場所に元のサイズで描画およびトリミングする方法を紹介します。
C#
で Graphics.DrawImage()
メソッドを使用して画像を描画およびトリミングする
グラフィックスは System.Drawing
名前空間にあり、主に .Net ベースの
Windows アプリケーションでグラフィックスや画像を表示または描画するために使用されます。 .Net
は、ペン、ブラシ、四角形、円などのグラフィックス オブジェクトと図形を処理するための複数のクラスを提供します。
Graphics および Image .Net
クラスは、Windows フォームに画像をレンダリングできます。 DrawImage()
関数は、指定された位置に画像の一部を描画します。
以下は DrawImage
関数のコード スニペットです。
# cCopypublic void DrawImage(System.Drawing.Image image, float x, float y,
System.Drawing.RectangleF srcRect, System.Drawing.GraphicsUnit srcUnit);
パラメータについては、以下で説明します。
image
- 描画する画像を指定します。x
- 画像の x 座標を指定します。y
- 画像の y 座標を指定します。srcRect
- 描画する画像の部分を指定する RectangleF 構造。srcUnit
-srcRect
で使用される測定単位を指定する GraphicsUnit 列挙のメンバー。
次のコード例は、Windows フォームと PaintEventArgs e
をパラメーターとして持つ Paint
イベント ハンドラーを使用して実装されています。
以下は、実行された列挙されたアクションです。
- 画像は、
C:\Users\lolaa\Downloads
フォルダにある JPEG ファイルKoala.jpg
から作成されました。 - 画像を描画するための座標が作成されました。
- イメージの一部を抽出するために、ソースの四角形が作成されました。
- 測定単位はピクセルに設定されました。
- 画面に画像が描画されました。
指定されたソース四角形のサイズによって、画面に描画される元のスケーリングされていないイメージの部分が決まりました。
# cCopyusing System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CreatingImageObject {
public partial class Form1 : Form {
Image img = null;
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {}
private void button1_Click(object sender, EventArgs e) {
if (img == null) {
img = Image.FromFile(@"C:\Users\lolaa\Downloads\Koala.jpg");
}
}
private void Form1_Paint(object sender, PaintEventArgs e) {
if (img != null) {
// Graphics g = e.Graphics;
Graphics g = this.CreateGraphics();
g.DrawImage(img, 0, 0, this.Width, this.Height);
g.Dispose();
}
}
}
}
出力:
ボタンをクリックすると、以下の画像が表示されます。
出力:
# cCopyRectangle cropRect = new Rectangle(...);
Bitmap src = Image.FromFile(fileName) as Bitmap;
Bitmap target = new Bitmap(cropRect.Width, cropRect.Height);
using (Graphics g = Graphics.FromImage(target)) {
g.DrawImage(src, new Rectangle(0, 0, target.Width, target.Height), cropRect, GraphicsUnit.Pixel);
}
DrawImage()
を 5つのパラメーターで使用して C#
で画像をトリミングする
前に描いた画像を編集またはトリミングするには、DrawImage(Image, Single, Single, RectangleF, GraphicsUnit)
関数を使用できます。 関数内で 5つのパラメーターを使用したことがわかります。
上記のコードを更新すると、異なる出力が得られます。 以下は、更新されたコード例です。
# cCopyusing System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CreatingImageObject {
public partial class Form1 : Form {
Image img = null;
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {}
private void button1_Click(object sender, EventArgs e) {
if (img == null) {
// Create image.
img = Image.FromFile(@"C:\Users\lolaa\Downloads\Koala.jpg");
}
}
private void Form1_Paint(object sender, PaintEventArgs e) {
if (img != null) {
Graphics g = this.CreateGraphics();
// specify the coordinates for upper-left corner of image.
float x = 100.0F;
float y = 100.0F;
// rectangle is created for the source image with custom dimensions.
RectangleF srcRect = new RectangleF(50.0F, 50.0F, 150.0F, 150.0F);
GraphicsUnit dim = GraphicsUnit.Pixel;
// image is drawn to the screen.
g.DrawImage(img, x, y, srcRect, dim);
g.Dispose();
}
}
}
}
出力:
DrawImage()
を指定された部分、場所、およびサイズで使用して C#
で画像をトリミングする
DrawImage()
関数を使用して、選択した画像の指定した部分を指定した場所に指定したサイズで描画することもできます。
構文:
# cCopypublic void DrawImage(System.Drawing.Image image, System.Drawing.Rectangle destRect, float srcX,
float srcY, float srcWidth, float srcHeight,
System.Drawing.GraphicsUnit srcUnit,
System.Drawing.Imaging.ImageAttributes? imageAttrs,
System.Drawing.Graphics.DrawImageAbort? callback, IntPtr callbackData);
上記のコードを更新すると、異なる出力が得られます。 以下は、更新されたコード例です。
パラメータについては、以下で説明します。
image
- 描画する画像を指定します。destRect
- 画面上の画像の位置とサイズを指定します。 描画された画像を四角形に合わせてスケーリングします。srcX
とsrcY
- 画像の左上隅の x 座標と y 座標。srcWidth
とsrcHeight
- 画像の幅と高さをそれぞれ指定します。srcUnit
-GraphicsUnit
列挙に属します。srcRect
パラメータで使用される測定単位です。imageAttrs
- 画像オブジェクトの色変更とガンマ情報を指定するImageAttributes
インスタンス。callback
-Graphics.DrawImageAbort
のデリゲート関数。 画像を描画するときに呼び出すDrawImage()
オーバーロードを指定します。 アプリケーションの仕様によって、このメソッドが呼び出される回数が決まります。callbackData
-Graphics.DrawImageAbort
デリゲートがDrawImage
メソッドの実行を停止するかどうかをチェックするときに使用する追加データを値で指定します。
以下のコードの例も、Windows フォームと PaintEventArgs e
をパラメーターとする Paint
イベント ハンドラーを使用して実装されています。
コードは次のアクションを実行します。
Graphics.DrawImageAbort
コールバック メソッドのインスタンスが作成されました。C:\Users\lolaa\Downloads
フォルダーにあるKoala.jpg
画像が作成されました。- イメージを描画するための宛先長方形のポイントが作成されました。
- 描画するイメージの部分を指定するために、長方形のコンテナーが作成されました。
- グラフィック描画単位はピクセルに設定されました。
- 元の画像が画面に描画されました。
- 調整された画像を描画するための追加の四角形コンテナー。
- 調整された画像の属性をより大きなガンマ値に設定します。
- 調整した画像が画面に描画されました。
Graphics.DrawImageAbort
コールバックは、DrawImage
メソッドの実行を決定する bool を返します。
# cCopyusing System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CreatingImageObject {
public partial class Form1 : Form {
Image img = null;
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {}
// Define DrawImageAbort callback method.
private bool DrawImageCallback8(IntPtr callBackData) {
// Test for call that passes callBackData parameter.
if (callBackData == IntPtr.Zero) {
// If no callBackData passed, abort the DrawImage method.
return true;
} else {
// If callBackData passed, continue DrawImage method.
return false;
}
}
private void button1_Click(object sender, EventArgs e) {
if (img == null) {
// Create image.
img = Image.FromFile(@"C:\Users\lolaa\Downloads\Koala.jpg");
}
}
private void Form1_Paint(object sender, PaintEventArgs e) {
if (img != null) {
Graphics g = this.CreateGraphics();
// Create a call-back method.
Graphics.DrawImageAbort imageCallback = new Graphics.DrawImageAbort(DrawImageCallback8);
IntPtr imageCallbackData = new IntPtr(1);
// Create image.
// Image newImage = Image.FromFile(@"C:\Users\lolaa\Downloads\Koala.jpg");
// img = Image.FromFile(@"C:\Users\lolaa\Downloads\Koala.jpg");
// rectangle for the original image.
Rectangle destRectOriginal = new Rectangle(100, 25, 450, 150);
// coordinates of the rectangle.
float x = 50.0F;
float y = 50.0F;
float width = 150.0F;
float height = 150.0F;
GraphicsUnit dim = GraphicsUnit.Pixel;
// Draw original image to screen.
g.DrawImage(img, destRectOriginal, x, y, width, height, dim);
// rectangle for the adjusted image.
Rectangle destRectAdjusted = new Rectangle(100, 175, 450, 150);
// image attributes and sets gamma.
ImageAttributes imageAttribute = new ImageAttributes();
imageAttribute.SetGamma(4.0F);
// Draw adjusted image to screen.
try {
checked {
// Draw adjusted image to screen.
g.DrawImage(img, destRectAdjusted, x, y, width, height, dim, imageAttribute,
imageCallback, imageCallbackData);
}
} catch (Exception ex) {
g.DrawString(ex.ToString(), new Font("Arial", 8), Brushes.Black, new PointF(0, 0));
}
}
}
public void DrawImageRect4FloatAttribAbortData(PaintEventArgs e) {}
}
}
出力:
他のオーバーロードされた DrawImage()
メソッドに関する詳細な議論は、[このリファレンス] で利用できます。