Development Experience (85) 썸네일형 리스트형 MSDN WIC 의 Pixel Format 정리 1. Color Channel - 8 bit, 16 bit 등의 bit로 한 색깔을 메모리 상에서 표현함 몇몇 format에서는 꼭 8의 배수를 사용하지는 않는다. 그러나 byte align은 맞추어준다. 예를 들어 5bit로 한 color channel을 표현할 경우 3 channel은 15bit의 공간을 차지하지만, byte align을 위해 8의 배수인 16bit 공간을 사용한다. 마지막 1bit는 패딩인 것이다. +) 참고로, RGB를 예로 들어볼 때 Color Channel 은 R 하나, G 하나, B 하나를 의미한다. 2. 픽셀을 나타내는 format은 여러 가지가 있다. 디지털 이미지의 color channel structure는 다양함 WIC(Windows Imaging Component).. C++ Heap corruption 원인 C++ 로 코딩을 하다보면 간헐적으로 Heap Corruption이 발생하는데, 그때마다 매번 같은 실수를 반복한 게 원인이었다. 바로 메모리를 두 번 해제하는 것. MyClass myVar = new MyClass(); for(int i = 0; i < 2; i++) { delete myVar; } 이렇게 하면 두번째 루프에서 이미 메모리 해제된 myVar을 또다시 메모리 해제한다. 이 때 Heap Corruption이 발생한다. if(myVar != nullptr) { delete myVar; myVar = nullptr; } 요렇게 메모리를 해제하고 나서 변수의 값을 NULL로 초기화해주자. 그리고 메모리를 해제하려 할 때 변수의 값이 NULL인지 확인을 먼저 해주자. 첫 GS 인증을 하고 난 후기.. 시작 SW 개발병으로 시작했던 군 생활을 마치고 나서, 작년 이맘때쯤 지금 다니는 회사에 신입 개발자로 입사하였다. 초반 6개월 정도는 회사의 메인 솔루션에 연관된 세팅 프로그램을 만드는 업무를 맡았었다. 이후 올해의 시작을 맞이하며 나에게 새로운 업무가 할당되었다. GS 인증을 받을 소프트웨어를 만들라는 것. 처음으로 가시적인 결과를 낼 수 있는 기회라 생각되는 동시에, 몇 백만원 가량의 시험비를 듣고 나선 갑자기 어깨가 무거워지는 걸 느낄 수 있었다. 게다가 GS인증을 진행하는 기관인 TTA에서 최근 규정을 바꾼 것도 부담으로 다가왔다. 기존에는 GS인증 기간 중 프로그램의 하자가 있을 경우 여러 번 패치 버전을 보낼 수 있었지만, 바뀐 방식으로는 그 패치의 횟수가 단 1회로 제한되어버린 것이었다. .. WPF Window 창이 작업 표시줄 (Task bar) 을 덮는다면.. WPF에서 Window 창이 작업 표시줄을 덮어버리는 현상이 발생하였다. 특정 모니터에서만 그랬는데, 나는 이 이슈가 MaxHeight를 제대로 설정해주지 않아서 발생한 것이라 생각했다. 그래서 this.MaxHeight = SystemParameters.MaximizedPrimaryScreenHeight; 라는 구문을 View의 Load() 함수 내부에서 선언해주었지만 문제는 해결되지 않았다. 30분쯤 흐른 후 내가 깨달은 건, 이 문제의 원인이 MaxHeight가 아니라 MinHeight 였다는 것이었다. MinHeight = "1100" 으로 잡았었는데, 이 Height가 1920 * 1200 해상도에서는 정상적으로 보였지만 1920 * 1080 해상도에서는 1080이 1100 보다 작으므로 작업 .. C#, WPF 창이 중복으로 뜬다면.. EventHandler를 의심하라 C#, WPF 개발 도중 팝업을 띄우는 기능을 쓸 일이 있었다. 어떤 설정을 하는 SettingWindow를 띄우고, 세팅 도중 올바른 설정이 아니면 Popup 창을 띄워서 오류를 지적해주는 기능이었다. 그런데 어느 순간부터 올바른 설정이 아닐 때 Popup 창이 중복으로 여러번 띄워지는 에러가 나고 있음을 발견하였다. 난 분명 한번만 Popup 창을 띄워서 사용자에게 잘못된 설정을 인지시키고 리턴하도록 코드를 짰는데... 30분정도 헤메다 원인을 찾았다. 실마리는, Popup 창이 중복으로 띄워지는 횟수가 SettingWindow를 몇 번 띄웠는지와 정비례하게 증가한다는 사실이었다. 즉 사용자가 무언가 설정할 필요가 있어서 SettingWindow를 띄우고 이것저것 설정하는 시나리오를 생각해보자. 사용.. WPF TreeView Header 클릭 안될 때 WPF TreeView를 사용하면서 TreeViewItem의 Text 부분(Header)을 클릭했을 때 Click 이벤트가 발생되지 않는 현상을 발견하였다. 원인은 내가 짠 코드에 있었는데, 안에 를 또 선언해서 작성했던 게 원인이었다. 내부에서 ItemTemplate 을 삭제하니 잘 클릭되었다. WPF C# Button Command in DataTemplate (바인딩이 안될때..) DataTemplate 안에 선언된 Button의 경우 Command를 그냥 바인딩하면 바인딩이 안된다. Command가 부모의 DataContext에 존재하기 때문이다. 그래서 Command를 찾기 위한 대상을 변경해주어야 한다. 즉 정리해보면, 평소라면 위와 같이 선언했겠지만 DataTemplate 내부에 Button이 존재한다면 위와 같이 선언해야한다. 혹은 좀 더 간결하게 하기 위해 C# SynchronizationContext 와 await C#에서 비동기(Async) 동작을 하기 위해선 보통 async - await 을 사용한다. 그리고 WPF에서 메인 쓰레드인 UI 쓰레드의 어떤 UI Component를 다른 쓰레드에서 변경하려고 하면 InvalidOperationException 오류가 발생한다. 그래서 UI 쓰레드가 아닌 다른 쓰레드에서 UIComponent를 변경하려고 하면 Dispatch.BeginInvoke() 함수를 사용한다. SynchronizationContext는 현재 수행중인 코드가 속한 쓰레드의 현재 환경을 나타낸다. 다시 말해, 우리가 비동기 프로그램에서 다른 쓰레드를 실행시킬 때 현재의 쓰레드 환경을 SynchronizationContext에 저장함을 의미한다. 그렇다면 SynchronizationContext는 .. 이전 1 ··· 5 6 7 8 9 10 11 다음