C#에서 이미지 자르기
-
Graphics.DrawImage()
메서드를 사용하여C#
에서 이미지 그리기 및 자르기 -
5개의 매개변수와 함께
DrawImage()
를 사용하여C#
에서 이미지 자르기 -
DrawImage()
를 지정된 부분, 위치 및 크기와 함께 사용하여C#
에서 이미지 자르기
이 글에서는 C# 코드를 사용하여 특정 이미지를 지정된 위치에 원본 크기로 그리고 자르는 방법을 소개합니다.
Graphics.DrawImage()
메서드를 사용하여 C#
에서 이미지 그리기 및 자르기
그래픽은 System.Drawing
네임스페이스에서 찾을 수 있으며 주로 .Net 기반
Windows 응용 프로그램에서 그래픽 또는 이미지를 표시하거나 그리는 데 사용됩니다. .Net
은 펜, 브러시, 사각형, 원 등과 같은 그래픽 개체 및 모양을 처리하는 여러 클래스를 제공합니다.
그래픽 및 이미지 .Net
클래스는 Windows Form에서 이미지를 렌더링할 수 있습니다. DrawImage()
함수는 지정된 위치에 이미지의 일부를 그립니다.
다음은 DrawImage
기능에 대한 코드 스니펫입니다.
public void DrawImage(System.Drawing.Image image, float x, float y,
System.Drawing.RectangleF srcRect, System.Drawing.GraphicsUnit srcUnit);
매개변수는 아래에 설명되어 있습니다.
이미지
- 그릴 이미지를 지정합니다.x
- 이미지의 x 좌표를 지정합니다.y
- 이미지의 y 좌표를 지정합니다.srcRect
- 그릴 이미지 부분을 지정하는 RectangleF 구조입니다.srcUnit
-srcRect
에서 사용하는 측정 단위를 지정하는 GraphicsUnit 열거형의 멤버입니다.
다음 코드 예제는 PaintEventArgs e
를 매개 변수로 사용하여 Windows Forms 및 Paint
이벤트 핸들러를 사용하여 구현됩니다.
다음은 수행된 열거된 작업입니다.
C:\Users\lolaa\Downloads
폴더에 있는Koala.jpg
JPEG 파일에서 이미지가 생성되었습니다.- 이미지를 그릴 좌표가 생성되었습니다.
- 이미지의 일부를 추출하기 위해 소스 사각형이 생성되었습니다.
- 측정 단위는 픽셀로 설정되었습니다.
- 이미지가 화면에 그려졌습니다.
지정된 소스 사각형 크기에 따라 화면에 그려지는 크기 조정되지 않은 원래 이미지의 부분이 결정됩니다.
using 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();
}
}
}
}
출력:
버튼을 클릭하면 아래와 같은 이미지가 표시됩니다.
출력:
Rectangle 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);
}
5개의 매개변수와 함께 DrawImage()
를 사용하여 C#
에서 이미지 자르기
앞에서 그린 이미지를 편집하거나 자르려면 DrawImage(Image, Single, Single, RectangleF, GraphicsUnit)
기능을 사용할 수 있습니다. 여기에서 함수 내에서 5개의 매개변수를 사용한 것을 볼 수 있습니다.
위의 코드를 업데이트하면 다른 출력이 제공됩니다. 아래는 업데이트된 코드 예제입니다.
using 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()
함수를 사용하여 지정된 위치에 지정된 크기로 선택한 이미지의 지정된 부분을 그릴 수 있습니다.
통사론:
public 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);
위의 코드를 업데이트하면 다른 출력이 제공됩니다. 아래는 업데이트된 코드 예제입니다.
매개변수는 아래에 설명되어 있습니다.
이미지
- 그릴 이미지를 지정합니다.destRect
- 화면에서 이미지의 위치와 크기를 지정합니다. 사각형에 맞게 그려진 이미지의 크기를 조정합니다.srcX
및srcY
- 이미지 왼쪽 위 모서리의 x 및 y 좌표입니다.srcWidth
및srcHeight
- 각각 이미지의 너비와 높이를 지정합니다.srcUnit
-GraphicsUnit
열거에 속합니다.srcRect
매개변수에서 사용하는 측정 단위입니다.imageAttrs
- 이미지 개체에 대한 다시 칠하기 및 감마 정보를 지정하는ImageAttributes
인스턴스입니다.콜백
-Graphics.DrawImageAbort
의 대리 함수입니다. 이미지를 그릴 때 호출할DrawImage()
오버로드를 지정합니다. 응용 프로그램의 사양에 따라 이 메서드가 호출되는 횟수가 결정됩니다.callbackData
-DrawImage
메서드의 실행을 중지할지 여부를 확인할 때 사용할Graphics.DrawImageAbort
대리자에 대한 추가 데이터를 지정하는 값입니다.
아래 코드의 예 역시 Windows Forms와 PaintEventArgs e
를 매개변수로 하는 Paint
이벤트 핸들러를 사용하여 구현되었습니다.
코드는 다음 작업을 수행합니다.
Graphics.DrawImageAbort
콜백 메서드의 인스턴스가 생성되었습니다.C:\Users\lolaa\Downloads
폴더에Koala.jpg
이미지가 생성되었습니다.- 이미지를 그릴 대상 사각형에 대한 점이 생성되었습니다.
- 그릴 이미지 부분을 지정하기 위해 직사각형 컨테이너가 생성되었습니다.
- 그래픽 그리기 단위가 픽셀로 설정되었습니다.
- 원본 이미지가 화면에 그려졌습니다.
- 조정된 이미지를 그리는 추가 사각형 컨테이너.
- 조정된 이미지의 속성을 더 큰 감마 값으로 설정합니다.
- 조정된 이미지가 화면에 그려졌습니다.
Graphics.DrawImageAbort
콜백은 DrawImage
메서드의 실행을 결정하는 bool을 반환합니다.
using 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()
메서드에 대한 자세한 내용은 [이 참조]에서 확인할 수 있습니다.