이미지 리샘플링 정도로는 1GB가 넘는 대용량을 할당받는 경우는 만나지 않을 줄 알았다. 그런 경우는 보기 드문 특이한 경우라고 생각했다… 그런데, \(10,000 \times 10,000\) 이미지를 막상 만나보니 그렇게나 특이한 경우가 아니었다. 일단 이미지는 픽셀당 4개의 요소(RGBA)로 구성되어 있다. 즉, \(10,000 \times 10,000 \times 4 = 400,000,000 = 400MB\) 개로 구성되어 있다. 그리고, 내가 쓰는 리샘플링 코드는 float 단위에서 SIMD2를 사용해서 처리한다. 따라서, \(400MB \times sizeof(float) = 400MB \times 4 = 1.6G\)를 사용한다. Visual Studio에서 이렇게 큰 메모리를 사용할 때는 큰 ..
이전 글에서 계속… 7. #define VALENCE 수정 pixel_grid.cpp 파일에 아래와 같이 VALENCE()가 정의되어 있다. #define VALENCE(neighbor_mask) __builtin_popcount(neighbor_mask) 이를 아래와 같이 수정한다. #ifdef _MSC_VER #include #define VALENCE(neighbor_mask) __popcnt(neighbor_mask) #else #define VALENCE(neighbor_mask) __builtin_popcount(neighbor_mask) #endif 8. boost lib 폴더 지정 Solution Explorer - depixelize의 설정에서 Library Directories에 아래 ..
이전 글에서 계속… 4. depixelize 컴파일 앞에서도 썼듯이, 몇 가지 튜닝을 해야 정상적으로 컴파일할 수 있다.우선 다운받은 파일을 적절한 폴더에서 압축을 풀면 아래와 같은 구성을 볼 수 있다. 여기서 우선 src 폴더에 저장된 CMakeLists.txt 파일에 Boost 및 OpenCV의 폴더 정보를 추가하여 아래와 같이 수정한다. cmake_minimum_required(VERSION 2.8) project(depixelize) set(BOOST_ROOT c:/_lib/boost_1_62_0) set(BOOST_INCLUDE_DIRS c:/_lib/boost_1_62_0/boost) set(BOOST_LIBRARYDIR c:/_lib/boost_1_62_0/stage/win32/lib) se..
2016/10/30 - Depixelizing Pixel Art(픽셀 제거 픽셀 아트) 소개 앞의 포스트에서 소개한 Depixelizing Pixel Art는 실제로 논문을 읽은 뒤 구현하기엔 쉽지가 않다.뒤져보니 Cary Yang이라는 분께서 C++로 구현한 결과를 깃허브에 올려두셨다. 그런데, 막상 이 소스를 Visual Studio 2015로 컴파일해보려니 쉽지 않다.Boost와 OpenCV를 사용해서 작성되었기 때문에 이를 미리 설치해야 하고, 몇 가지 튜닝이 필요하기 때문이다. 필요한 도구는 Boost, OpenCV 그리고, cmake.우선 각각을 다음 위치에서 다운받는다. - cyang1 / depixelize (github) - Boost 1.62.0 - OpenCV (github)- cma..
회사에서 Visual Studio 2010을 쓰는데, 갑자기 컴파일 도중에 아래와 같은 화면이 뜨면서 컴파일에 실패했다. HiBS ONE Compont 등록 프로그램이라니… 이 놈의 정체를 뒤지다보니 C:\Windows\SysWOW64에 설치된 rc.exe즉, resource compiler rc.exe 대신 이 놈이 실행되는 아햏햏한 경우인 것이다. 이게 뭔지는 모르겠지만, 회사에서 일괄적으로 설치한 프로그램의 일부인 것 같다.난 안 쓰는 프로그램으로 추정되어 파일명 변경으로 무력화. 그런데, 또 컴파일 오류가 나온다. 1>Link: 1> 코드를 생성하고 있습니다. 1> 코드를 생성했습니다. 1>LINK : fatal error LNK1123: COFF로 변환하는 동안 오류가 발생했습니다. 파일이 잘못..
GIF 포맷이 세상에 나온지도 거의 30년이 되어간다.특허 문제 등으로 시끄럽기도 했지만, 이제 관련 특허도 다 기간이 만료되고, 누구나 쓸 수 있는 포맷이 되었다. 시간이 지나면서 PNG가 GIF를 거의 대체할 수 있고, 유일하게 남은 Animated GIF 기능도 대체 포맷들이 많이 나왔다.하지만, 그래도 GIF는 여전히 많이 쓰이고 있고, 파일의 크기를 더 줄일 수 있는 방법들도 연구되고 있다. 이러한 연구 중 가장 대표적인 프로젝트는 gifsicle이다. 특히 Animated GIF에 대해 프레임 간 압축시 이전 프레임과 겹치는 부분을 비움으로서 시간적 압축 개념을 추가한 것이다.소스는 Gitub에 공개하고 있음. 여기에 화질을 조금 더 떨어뜨리는 기능을 추가해서 파일의 크기를 더 줄이는 프로젝트..
어플이 실행되는 OS의 버전을 인식하게 하려면 GetVersionEx() 함수를 쓰면 되었다. 그런데, Windows 8.1에서는 여러가지 이유로 이 함수를 deprecate 시켰다. 대신 VersionHelpers라는 API를 통해 훨씬 간단하게 OS 버전을 확인하도록 만들었다. 그럼에도 불구하고, 굳이 GetVersionEx()로 버전을 정확히 인식하려면 매니페스트에 몇 줄을 추가하면 된다. 위와 같은 파일을 하나 만들어 적절한 위치에 저장한 뒤에 이를 추가 매니페스트로 지정하면 끝임. 덧. 원래 iTrans의 문제를 해결하려고 시작했지만, 정작 OS 정보는 레지스트리에서 직접 읽었다는 게 함정
Visual Studio 2010/2012에선 도구상자가 분실(?)되는 사건이 종종 발생한다. 이 문제를 해결하려면 다음 순서를 따르면 된다. 1. 도구 상자 다시 설정 - 도구 상자에서 오른쪽 클릭을 한 뒤 도구 상자 다시 설정(E)를 클릭한다. 2. Visual Studio 종료 3. 탐색기에서 다음 위치로 이동해 .TBD 파일들을 삭제 [사용자 폴더]\AppData\Local\Microsoft\VisualStudio\[VS버전] 4. 레지스트리 편집기에서 다음 키들의 내용을 삭제 HKCU\Software\Microsoft\VisualStudio\[VS버전]\ToolboxControlsInstaller_AssemblyFoldersExCacheHKCU\Software\Microsoft\VisualStu..
Visual C++에서 개발하다 보면 리소스 ID가 종종 꼬이는 문제가 생긴다.리소스 ID를 수작업으로 정리하며 이런 툴을 하나 만들어볼까 했는데… 아니나 다를까 이미 있었다. Riverblade에서는 Code Project에는 VC 5.0/6.0/.Net 용을 2001년에 공개했고…이후, 이를 ResOrg라는 이름으로 업그레이드해서 상용 버전으로 공개했다. 상용 버전은 플러그인 형태로 VS2012에도 적용할 수 있고, 공개 버전 역시 VS2012에서 사용 가능하다.
난 여전히 VC++ 6.0을 사용해왔다. 컴파일된 실행파일을 어떤 윈도우(물론 2K 이상)에서도 실행할 수 있다는 점이 가장 큰 이유다. 물론, 정적 라이브러리에서 MFC 사용으로 설정하면 되지만, 실행파일의 크기가 너무 커진다. 그런데, 이제 보니 컴파일러 설정 등을 조금만 손대면 VS2005 이상에서도 유사한 결과를 만들 수 있었다. 우선, targetver.h을 수정한다. XP에서 동작하는 프로그램을 원하면 이 정도면 된다. #pragma once #include #define _WIN32_WINNT _WIN32_WINNT_WINXP #include 그리고, 프로젝트 속성에서 다음 부분을 손대면 된다. - 일반 → MFC 사용: 표준 Windows 라이브러리 사용 - C/C++ → 코드 생성 → 런..
그동안 10년 넘게 생사고락을 함께한 Visual C++ 6.0을 버리기로 했다. 새로운 파트너는 Visual Studio 2010. 그런데, VS2010은 그냥 쓰기엔 뭔가 살짝 아쉬워서 몇 가지를 준비해야 했다. 1. 인텔리센스 끄기 뭔가를 많이 도와준다는데, 너무 느리다. 마치 허접한 컴퓨터의 보안을 도와주기 위해 설치한 nProtect와 키보드 보안 프로그램의 느낌. 인텔리센스를 끄려면 메뉴에서 Tools → Options → Text Editor → C++ → Advanced를 찾아가서… Disable Database와 Disable IntelliSense를 False로 설정한다. ※ 이렇게 인텔리센스를 끄면 리소스뷰와 클래스뷰가 제대로 나오지 않는 치명적 버그가 있음. ㄷㄷㄷ 2. 빌드 넘버 ..