728x90
반응형
C#에서 이미지를 복사해서 작업해야 하는 경우가 있습니다. 복사하는 방법에는 다른 방법이 있지만 주로 저는 Bitmap 클래스의 Clone 메서드를 쓰거나 new Bitmap으로 새로운 객체를 만들기도 하는데요. 실제 코드를 보다 보면 이 두 개를 어떤 상황에서 쓰는지 알 수 없었습니다. 이번 포스팅은 Bitmap.Clone() 메서드와 new Bitmap을 비교하고 간단한 예시로 확인해 보겠습니다.
| Bitmap.Clone()
- 기존 Bitmap 객체의 복사본을 만드는 데 사용하는 메서드이며 원본 이미지를 변경하지 않으면서 이미지를 조작할 수 있습니다. Clone 작업 후 이미지를 회전, 크롭 등 다양한 작업을 할 수 있습니다. 간단한 예시를 보겠습니다.
예시)
Bitmap originalBitmap = new Bitmap("original_image.png");
Bitmap copyBitmap = (Bitmap)originalBitmap.Clone();
장점)
- Bitmap.Clone() 방법은 original Bitmap에서 copy Bitmap을 생성하기 때문에 별개의 객체가 됩니다. 따라서 원본 이미나 복사 이미지의 수정이 다른 이미지에 영향을 끼치지 않습니다.
- 흔히 말하는 깊은 복사(Deep Copy)이며 원본 객체의 내부 데이터까지 복사됩니다. 따라서 별개의 메모리를 사용하게 되므로 메모리 최적화하는데 더욱 용이합니다.
단점)
- 대신 큰 이미지를 복사하게 됐을 때 메모리 사용량이 늘어 속도가 저하될 수도 있습니다
| new Bitmap()
- new Bitmap() 생성자는 비어있는 Bitmap 객체를 생성합니다. 일반적으로는 이미지 파일을 읽거나 외부 소스에서 이미지 데이터를 가져와 객체를 만들 때 사용하며 간단한 예시를 통해 알아보겠습니다.
예시)
Bitmap originalBitmap = new Bitmap("original_image.png");
Bitmap copyBitmap = originalBitmap;
특징)
- copy Bitmap은 original Bitmap 기반으로 생성된 것이어서 동일한 이미지 데이터를 공유합니다. 둘 중 하나를 수정해도 다른 이미지에도 변경 내용이 반영됩니다.
장점)
- new Bitmap()은 외부 이미지 파일을 로드할 수 있으며 새로운 이미지 객체를 만들 수 있습니다.
- 예를 들어 이미지를 그리거나 빈 이미지 객체를 만들 수 있으며 새로운 이미지를 만들 때는 우너본 이미지와 무관한 새로운 객체가 필요로 하는 경우가 있는데 그 경우 사용합니다
- 비어있는 Bitmap 객체를 생성하거나 외부 이미지 파일을 읽을 때 더 빠릅니다. 이미지를 로드하는 과정이 빠르게 수행됩니다.
단점)
- new Bitmap() 생성자를 사용하여 새로운 Bitmap 객체를 만들 때는 외부 이미지 파일의 경로를 제공해야 합니다. 잘못된 파일 경로를 제공하면 예외가 발생할 수 있으며, 이미지 파일이 없을 경우 예외가 발생합니다. 이에 대한 예외 처리가 필요합니다
| 어떤 것을 사용하면 될까?
속도 중요 : 이미지 로딩 속도가 중요하거나 빠르게 처리해야 하는 경우 new Bitmap() 생성자를 고려
안전성 중요 : 원본 이미지를 변경하지 않고 이미지를 조작해야 하는 경우 Bitmap.Clone() 메서드를 사용
이렇게 C#에서 이미지를 복사하는 방법 두 가지에 대해 알아보았습니다. 이외에도 다른 방법은 다음 포스팅에서 확인하겠습니다
질문이 있으시거나 잘못된 점이 있다면 댓글로 남겨주세요
다음 포스팅으로 찾아오겠습니다
감사합니다 :)
728x90
반응형
'C#' 카테고리의 다른 글
[C#] CancellationToken 이해 (0) | 2023.10.25 |
---|---|
[C#] Marshal.Copy 이해 (0) | 2023.09.26 |
[C#] Bitmap.LockBits 메서드 (0) | 2023.09.25 |
[C#] unsafe / fixed 키워드 (0) | 2023.09.25 |
[C#] record(레코드) 정의와 사용 (0) | 2023.09.24 |