※ 요약

개발을 하거나 디자인(색상 코드)을 하다보면 진법 변환을 해야할 일이 생기는데, 필자는 어느 블로거가 만든 진법 변환기를 사용한다. 이 진법 변환기는 2진수, 8진수, 10진수, 16진수, 아스키코드/유니코드 등을 지원하며 진법 변환기가 블로그 페이지에 있다보니 북마크 해두고 필요할 때마다 접속해서 진법을 변환한다.





※ 소개

아래는 사이트에 접속한 화면이다. 사용법은 직관적이므로 따로 설명하지 않겠으며 10진수, 16진수, 2진수, 8진수 등의 변환을 제공한다.


※ 요약

UAC란 윈도우 비스타부터 추가된 보안을 위한 기능으로써, UAC가 켜져 있을 경우 윈도우가 설치된 시스템 드라이브(보통 C드라이브)에는 파일 쓰기나 파일 변경이 불가능하다. 이럴때는 프로그램을 관리자 권한으로 실행해도 되지만 UAC에 관계없이 파일 쓰기나 변경이 가능한 폴더 Temp 폴더에 작업을 하는게 여러모로 편리하고 안전하다.


※ 탐색기에서 temp 폴더 경로 구하기

탐색기 주소표시줄에 환경변수 %temp%를 입력하면 현재 시스템의 temp 폴더를 알 수 있다. 필자의 경우 C:\Users\사용자 이름\AppData\Local\Temp가 temp 폴더의 경로다.



※ 실행창에서 temp 폴더 경로 구하기

실행창에 환경변수 %temp%를 입력하면 temp폴더가 탐색기를 통해 열린다.


※ 윈도우API 함수를 통해 경로 구하기

아래 예제는 MFC에서 작성한 예제다. MFC 말고도 C#이나 Java 등에서도 구할 수 있을텐데 필자는 C++만 해서 다른 언어는 자세히 모르겠다. 아무튼 GetTempPath를 이용하면 아래와 같이 temp 경로를 구할 수 있다.


※ 요약

필자는 대학생 시절 OpenCV를 이용한 영상처리를 공부한 적이 있고, 이 경험 바탕으로 가끔 영상처리를 이용한 프로그램 개발을 취미로 할때가 있다. 그러다보면 가끔 색상 변환을 해야할때가 있는데, OpenCV를 이용하면 간단하게 변환이 가능하지만 직접 구현해야 하는 경우엔 각각의 공식을 찾아야 한다. 필자도 신입때 직접 색상 변환을 해야해서 찾은 사이트가 있어 소개하고자 포스팅한다.



※ 변환 목록

XYZ -> RGB

RGB -> XYZ

XYZ -> Yxy

Yxy -> XYZ

XYZ -> Hunter-Lab

Hunter-Lab -> XYZ

XYZ -> CIE-L*ab

CIE-L*ab -> XYZ

CIE-L*ab -> CIE-L*CH°

CIE-L*CH° ->CIE-L*ab

XYZ -> CIE-L*uv

CIE-L*uv -> XYZ

RGB -> HSL

HSL -> RGB

RGB -> HSV

HSV -> RGB

RGB -> CMY

CMY -> RGB

CMY -> CMYK

CMYK -> CMY



※ 설명

상기 링크로 접속하면 아래와 같은 화면이 나온다. 보면 각종 변환 가능한 목록들이 있다.

예로 RGB를 HSV로 변환하는 공식을 열어보았다.



※ 요약
이번 포스트의 내용은 32비트나 64비트 윈도우에서 프로세스당 사용 가능한 최대 메모리에 대한 내용이다. 윈도우를 기준으로 작성하였고, 리눅스에서는 아마 적용이 안될것으로 생각된다.

※ 프로세스가 각 비트에서 사용 가능한 최대 메모리
32비트 : 2GB
64비트 : 8TB

※ 설명
책이나 학교에서 배운대로 라면 32비트는 2^32로써 4GB를, 64비트는 2^64로써 16EB의 주소 공간을 가질 수 있어야 하지만 위의 설명에서는 각각 2GB와 8TB만 사용할 수 있다고 하였다. 이는 각 프로세스가 할당 받은 가상 주소 공간은 분할되어 있고, 분할된 영역 중에 사용할 수 있는 메모리 공간이 각각 2GB와 8TB이기 때문이다.
참고로 아래는 32비트일때 분할된 각 공간의 크기다. 유저 모드 파티션이 프로세스가 사용 가능한 공간으로써 0x00010000 ~ 0x7FFEFFFF를 계산해보면 2047MB로써 대략 2GB가 된다는 걸 알 수 있다.

 Null 포인터 할당 파티션

 0x00000000 ~ 0x0000FFFF

 유저 모드 파티션

 0x00010000 ~ 0x7FFEFFFF

 64KB 접근 금지 파티션

 0x7FFF0000 ~ 0x7FFFFFF

 커널 모드 파티션

 0x80000000 ~ 0xFFFFFFFF


참고로 주소 공간 분할은 윈도우 커널 버전에 따라 조금씩 다를 수 있으며, 제작하려는 프로그램이 2GB 이상의 메모리를 사용한다면 64비트로 컴파일해야 할 것이다. 또 Visual Studio라면 "프로젝트 속성 -> Linker -> System -> Enable Large Addresses" 설정을 통해 사용할 수 있는 최대 메모리가 3GB까지 늘어난다고 한다.




 

 

※ 요약
필자는 MySQL에서 제공하는 Connector/C를 이용하여 13년도 09월에 프로그램을 개발한 적이 있다.

이후 13년도에 만들어진 버전을 15년도에 나온 버전으로 업그레이드를 하였는데, XP에서 실행이 안되는게 아닌가!? 

원래 XP에서도 잘 실행되던게, "프로시저 시작점 InitializeConditionVariable을(를) DLL KERNEL32.dll에서 찾을 수 없습니다."라는 메시지를 출력하며 실행이 안되었다. 그래서 다시 구버전을 찾으며 정리한 내용을 포스팅 하려고 한다.


※ 지난 버전 다운로드 방법

먼저 무슨 버전을 다운로드 할 지 정해야 한다.

그러기 위해서는 Version Change History를 봐야하는데, Documentation 메뉴에서 볼 수 있다.

필자는 Connector/C를 보기 위해 Documentation -> Connector/C로 이동하여 아래와 같이 버전 내역을 살펴봤다.

13년 09월 초에 제작하였으므로 시기상 2013-08-05에 릴리즈된 6.1.1 버전이 맞을 것이다.

 


버전을 정했으면 다운로드를 받아보자.

Downloads -> Archives 메뉴로 이동한뒤 Connector/C 항목으로 이동하였다.

그 뒤 원하는 버전을 선택한 뒤, 원하는 형태를 다운로드하면 된다.



BMP 헤더 정보입니다.


//비트맵 파일에 대한 정보(파일 헤드)
typedef struct tagBITMAPFILEHEADER
{
        WORD       bfType ;            //"BM"이라는 값을 저장함
        DWORD      bfSize ;            //바이트 단위로 전체파일 크기
        WORD       bfReserved1 ;       //예약된 변수
        WORD       bfReserved2 ;       //예약된 변수
        DWORD      bfOffBits ;         //영상 데이터 위치까지의 거리
} BITMAPFILEHEADER, FAR *LPBITMAPFILEHEADER , *PBITMAPFILEHEADER;

typedef struct tagBITMAPINFOHEADER
{
        DWORD      biSize;             //이 구조체의 크기
        LONG       biWidth;            //픽셀 단위로 영상의 폭
        LONG       biHeight;           //영상의 높이
        WORD       biPlanes;           //비트 플레인 수(항상 1)
        WORD       biBitCount;         //픽셀당 비트수(컬러, 흑백 구별)
        DWORD      biCompression;      //압축 유무
        DWORD      biSizeImage;        //영상의 크기
        LONG       biXPelsPerMeter;    //가로 해상도
        LONG       biYPelsPerMeter;    //세로 해상도
        DWORD      biClrUsed;          //실제 사용 색상수
        DWORD      biClrImportant;     //중요한 색상 인덱스
} BITMAPINFOHEADER, FAR *LPBITMAPINFOHEADER , *PBITMAPINFOHEADER;


+ Recent posts