반응형

Study/C# 18

C#에서 화면의 특정 부분 capture하기

문제의 정의 프로그램에서 화면 캡처(capture) 기능을 제공해야 할 때가 있다. 여기서 전체 화면에 대한 캡처가 아닌 부분 화면의 캡처가 필요한 경우도 있을 것이다. 이와 같이 부분 캡처를 수행하기 위한 C# 코드를 알아보자. 방법 이 방법을 수행하기 위한 코드는 Visual Studio 2012에서 수행되었다. C#에서 기본적으로 제공하는 네임스페이스(namespace) 중 System.Drawing과 System.Drawing.Imaging을 사용하여 특정 부분의 화면을 사각형을 캡처하고 이미지로 저장할 수 있다. 이 네임스페이스를 사용하기 위해 C# 프로젝트에서 참조를 먼저 추가해야 한다. 프로젝트를 생성하고 '참조'에 오른쪽 마우스 클릭을 하여 '참조 추가'를 선택하자. 이후 '어셈블리-프레임..

Study/C# 2021.04.08

C#에서 kd-tree 사용하기 (3차원, 2차원 상의 특정 점에서 가장 가까운 점 찾기)

문제의 정의 3차원의 모델 데이터를 점들로 표현할 수 있다. 그리고 외부의 어떤 한 점이 있을 때, 이 점으로부터 가장 가까운 한 점을 모델 데이터에 속하는 점들에서 찾고자 한다. 방법; kd-tree 여러 가지 방법이 있을 수 있다. 가장 간단한 방법은 모든 점들을 저장하고 외부의 한 점과 거리를 모두 측정하여 가장 가까운 점을 찾으면 된다. 하지만 이 방법은 매우 오래 걸릴 수 있다. 이를 효율적으로 가장 가까운 점을 찾기 위해서 kd-tree를 사용할 수 있다. kd-tree는 수많은 점들을 효율적으로 접근할 수 있는 구조를 만들어 데이터들을 저장해두는 방식이다. 효율적으로 접근할 수 있는 구조로 되어 있기 때문에 원하는 점을 빨리 찾을 수 있다. 데이터를 효율적으로 접근하기 위한 구조는 이진트리 ..

Study/C# 2021.02.28

이벤트 호출 시 null 확인 코드의 중요성

상황에 대한 설명 이벤트를 정의하고 이벤트에 맞추어 실행하고자하는 함수를 추가 할 수 있다. 예를 들어 이벤트가 발생하였을 때 특정 데이터를 넘겨주는 동작을 하고자하는 경우가 있다. 이를 다이어그램으로 나타내면 아래의 그림과 같다. 상황에 대한 코드 작성 1 : 이벤트를 호출하여 데이터를 받아보자 이러한 경우 아래와 같이 코드를 작성하여 사용할 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 public class EventSource { private EventHandler Updated; public void RaiseUpdates() { counter++; Updated(this, counter); } private int counter; } cs 위의 코드에서 바로 RaiseUpdate..

Study/C# 2021.02.08

C# WPF에서 MVC 디자인 패턴 연습 예제 구현하기

MVC란 무엇일까? MVC를 설명하기 전 간단하게 디자인 패턴에 대해서 설명해보고자 한다. 소프트웨어를 제작함에 있어 디자인 패턴이란 어떻게 설계하여 코드들을 작성할 것인지에 대한 방법들이다. 소프트웨어마다 ‘사용자가 누구인가?’, ‘어떤 상황에서 사용되는 소프트웨어인가?’ 등에 따라서 작성된 코드들을 배치하고 엮어 동작할지 조금씩 다르다. 엑셀과 같은 소프트웨어를 만들 때, 소프트웨어가 잘 동작하기 위해 코드를 엮는 방법과 효율적으로 코드를 작성하는 방법이 있을 수 있다. 반면에, 웹 기반에서 동작되는 소프트웨어는 이와 다른 방법이 있을 수 있다. 이러한 방법을 패턴화하여 개발자들이 소프트웨어를 설계하고 코드를 작성할 때 하나의 형식으로 의사소통을 할 수 있다. 이것이 소프트웨어의 디자인 패턴이다. 여..

Study/C# 2021.01.25

구분자(delimiter)가 같은 문자열(string) 데이터를 특정 타입(type)의 어레이(array)로 변환하기

문제의 정의 제품의 데이터 로그를 문자열(string)의 연속으로 저장하여 남긴다고 가정하자. 예를 들어 위치 센서의 값이 데이터 로그로 저장되는 경우를 생각해보자. 이 위치센서의 값은 기준 대비 오일러(Euler) 좌표계로 값을 저장해둔다. 즉, Tx, Ty, Tz, Rx, Ry, Rz에 해당하는 값들이 저장되어 있다. 이러한 일련의 값들을 ','(comma)를 구분자(delimiter)로 두고 문자열로 저장해두었다. 이러한 데이터 로그를 읽어드려 더블(double) 타입의 변수에 저장하여 다루고자 한다. 즉, 문자열 데이터를 더블 타입의 어레이 변수로 저장하고자 한다. 이를 다이어그램(diagram)으로 표현하면 아래와 같다. 방법 일반적인 방법을 먼저 소개하겠다. 먼저 문자열 값을 저장한 후 구분자..

Study/C# 2021.01.21

특정 어레이(array)의 일부분을 가져오거나 복사하기

문제의 정의 특정 어레이(array)가 있다고 가정하자. 이 어레이의 일부를 가져와서 사용하거나 다른 변수에 저장을 하고자 한다. 예를 들어 이 어레이의 데이터 중 인덱스 번호 3부터 7까지의 값을 다른 변수에 저장해야하는 경우 어떻게 해야할까? 방법 for loop을 사용하여 시작 인덱스부터 끝 인덱스까지 가져오는 방법이 일반적이다. C#의 Array 클래스가 가지고 있는 Copy() 메서드를 사용하면 조금 더 간결한 코드로 이를 수행할 수 있다. MS 문서의 Array.Copy 메서드 항목 중, Array.Copy(Array, Int64, Array, Int64, Int64)를 간단히 설명하고 사용해보고자 한다. 이 메서드는 다음과 같은 파라미터를 필요로 한다. 이 메서드를 사용하여 특정 어레이의 일..

Study/C# 2021.01.19

C# WPF에서 user control과 data binding에 대한 간단한 설명

응용 프로그램에서 유저 컨트롤(User control)이란? 윈도우 OS에서 동작되는 어떤 응용프로그램을 만든다고 가정하자. 여기서 응용프로그램은 사용자에게 정보를 보여줄 수 있고, 사용자의 입력을 받을 수도 있다. 예를 들면 텍스트로 정보가 작성된 어떤 ‘화면’이 있고, 사용자가 원하는 동작을 수행하기 위해 ‘버튼’이 있을 수 있다. 이처럼 화면과 버튼과 같은 요소들을 유저 컨트롤(User control)이라고 할 수 있다. 확장하여 생각한다면 UI의 요소라고 말할 수 있다. 유저 컨트롤은 응용프로그램을 개발할 때 사용자의 입력을 받기도 하고 사용자가 출력을 받아드리기도 하는 중요한 부분이다. 이러한 요소를 단순하게 사용할 수도 있지만 좀 더 편의성, 기능성을 주기 위해 개발자가 변형하여 사용할 수도 ..

Study/C# 2021.01.17

Third-party library 사용에 있어서 visual studio와 C# version 그리고 .NET framework 확인의 중요성

왜 나는 제목과 같은 내용이 중요하다고 하는가?! C# WPF을 사용하여 코딩을 할 때는 통합 개발 환경 (IDE; Integrate Development Environment)로 visual studio를 많이 선택하게 된다. 또한 여러 외부 라이브러리를 많이 사용하게 된다. 모든 코드를 A-Z까지 작성하는 것은 바보 같은 일이므로 똑똑한 누군가가 잘 만들어 놓은 것을 잘 활용하는 게 꽤나 많이 중요하다. 이때 library를 원하는대로 설치하는 것이 어려운데 그 이유는 호환성 때문이다. 우리가 사용하는 이 개발 환경에 맞는 library를 설치해야지만 온전히 그 library를 document와 예제를 참고해가면서 사용할 수 있을 것이다. 꼭 최신 버전이 아니더라도 이전의 버전을 설치하여 잘 활용하는..

Study/C# 2020.02.20
반응형