목록프로그래밍/C# (8)
노주현 개인 블로그
// 기본 private double DegToRad(double deg) { return Math.PI * deg / 180.0; } private double RadToDeg(double rad) { return rad * 180.0 / Math.PI; } // VisionPro 사용 시 NameSpace : Cognex.VisionPro Assembly : Cognex.VisionPro.Core double rad = CogMisc.DegToRad(double deg); double deg = CogMisc.RadToDeg(double rad);
Bitmap bmp =new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); using(Graphics g = Graphics.FromImage(bmp)) { g.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, bmp.Size, CopyPixelOperation.SourceCopy); }

문자열 인코딩이란? 2진법을 사용하는 컴퓨터가 인간의 언어를 규칙에 따라 2진수로 변환하는 방식 컴퓨터는 2진수와 문자를 1:1 로 대응하는 규칙을 통해 2진수로 문자를 처리한다. ex) 2진수: 0100 0001 -> 문자 A 인터넷에서 글자가 깨지거나 안보이는 문제가 발생하는 원인 1. 컴퓨터가 처음 등작했을 때 영어와 일부 특수 문자만 지원했다 시간이 지나 많은 국가가 자국의 언어를 표현하고자 독자적인 규칙을 만들기 시작했다 한국은 EUC-KR 을 만들었다. 2. 유니코드 방식이 만들어지면서 모든 언어를 표현할 수 있도록 통일 되었다. 3. 모든 개발 환경이 유니코드를 동일하게 처리하지 않기 때문에 개발자는 서로 호환되지 않는 유니코드 문자열 인코딩 방식 (UTF-8, UTF-16, UTF-32) ..

Interface 기본 사용 먼저 인터페이스를 위와 같이 선언한다 내부에는 카메라에 관련된 함수로 Grab() 을 선언해 두었다. 카메라 별 Class 를 구현하였고 각 Class 에는 동일하게 Grab() 메서드가 존재한다. 각 Grab() 메서드의 내용은 카메라 제조사마다 코드 내용은 상이할 수 있다 만약 ICamera 인터페이스를 상속해 놓고 Grab() 을 정의하지 않으면 아래와 같은 에러가 발생한다. Interface 필드 또는 프로퍼티 구현 Interface 내에서 필드를 선언하면 아래와 같은 오류가 발생한다. 프로퍼티 정의는 가능하다 Main Class 에서 Interface 의 프로퍼티를 필드와 같이 사용할 수 있다. Cognex VisionPro 에서의 Interface 사용 예시 ICo..

동기 1. 상대방의 일정 신호(결과 신호)에 의해서 다음 동작으로 이뤄짐 2. 어떤 루틴을 완전히 끝내고 제어를 반납 비동기 1. 상대방의 상태와 관계없이 일방적으로 동작하면 비동기 2. 동작이 안 끝났어도 일단 제어권을 반납한 후 작업 계속 BeginInvoke / EndInvoke int threadID; // 비 동기 실행에서 Thread 를 구분하는 ID // delegate 인스턴스 생성 AasyncDelegateCaller caller = new AasyncDelegateCaller(AasyncDelegate); // 비동기 시작 IAsyncResult result = caller.BeginInvoke(3000, out threadID, null, null); // EndInvoke 를 통해서..

Array Copy() Array.Copy(srcData, 0, dstData, 0, size); Buffer.BlockCopy() Buffer.BlockCopy(srcData, 0, dstData, 0, size); Marshal.Copy() static unsafe void MarshalCopy(byte[] src, int srcOffset, byte[] dst, int dstOffset, int count) { fixed (byte* b1 = &src[0]) fixed (byte* b2 = &dst[0]) { IntPtr ab2 = new IntPtr(b2); Marshal.Copy(src, 0, ab2,count); } } Cpp Copy Memory using System.Runtime.Inte..
using System.Drawing; using System.Drawing.Imaging; using System.Runtime.InteropServices; // Camera 등에서 buffer 값을 가져온다. byte[] buffer = 버퍼값 // Parameter int width; int height; // bmp LockBits 실행 Bitmap bmp = new Bitmap(width, height, PixelFormat.Format8bppIndexed); BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, bmp.PixelFormat); // byte[] to bmp Ma..
// Process 실행 여부 초기화 System.Diagnostics.Process proc = new System.Diagnostics.Process(); proc.StartInfo.FileName = "FileName.exe"; proc.StartInfo.WorkingDirectory = "C:\\FileDir"; proc.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.NOrmal; proc.Start(); // Process 확인되면 강제로 종료 System.Diagnostics.Process[] procList = SYstem.Diagnostics.Process.GetProcessesByName("FileName.exe"); if(..