본문 바로가기

Developement

(142)
[FLTK] X11/nano-X 에서 FLTK 화면 flushing FLTK 를 X11 이나 nano-X 에서 그리는 경우 화면 갱신을 Fl::check(); 또는 Fl::wait(); 등으로 갱신 시키지 않는 방법으로 이전의 글을 posting 했습니다만, 실제 nano-X 에서는 XFlush() 를 쓰지 않고 갱신 하는 것이 좀 더 안정이 있는 것으로 판단 되어 수정된 코드를 올립니다. 특히 XFlush() 는 thread-unsafe 이므로 중복으로 호출 되는 경우가 없어야 하는 것을 고려 해야 하므로 static bool 변수를 하나 사용하여 중복 호출의 위험을 줄였습니다. #ifdef _WIN32 #include #else #include #endif static bool isRedrawingFLTK = false; void RedrawFLTK() { if ( ..
[FLTK] Win32/X11 에서 FLTK 고속 rednering (또는 redraw) FLTK 에서는 사실상 Fl::check(); 나 Fl::wait(); 등으로 화면을 갱신 하는 방법이 있습니다. 하지만 이 방법을 사용할 경우 잘못된 화면 출력이나 프로그램 자체가 멈추는 문제가 발생되는 단점이 있습니다. 실질적으로 FLTK 는 강제적인 redraw 를 할수 있는 조건을 FLTK 자체가 결정 하는 구조이며, Windows 에서는 비활성화 된 Window 에서는 1초에 한번 그리는 경악적인 상태로 바뀝니다. 문제는 활성화 된 상태 이더라도 Fl_Window 객체를 아무리 redraw(); 하더라도 갱신은 "니 맘대로 되는것이 아니란다" 라는 단점이 있습니다. 이를 해결 하기 위해 여러 방법을 찾다가 문듯, 활성화된 FLTK Window 위에서 마우스를 계속 움직이면 고속으로 화면이 갱신 ..
[FLTK] Fl_RGB_Image 로 부터 회전된 이미지 얻기. FLTK 는 여러 플랫폼에서 간단하면서 깔끔한 UI 를 만들기에 매우 좋은 GUI library 입니다만, 기본 기능에만 기준을 두고 있다 보니 이미지 처리 ( 리사이즈나 회전 등 ) 는 없는 것이 아쉬운 부분 입니다. 이번의 경우는 이미지를 회전 시켜 표시 해야 하는 경우 (위 이미지 처럼 뭔가 열심히 일 하고 있으니 기다려 주십사~ 하는) 기본으로 그리는 수준으로는 깔끔한 이미지를 얻기 힘듭니다. 이를 개선 하기 위해 구글링 중 CodeGuru 에서 이미지 회전에 관한 글 을 찾았습니다. 그리고 이를 응용하여 다음과 같은 API 를 만들어 보았습니다. #include #ifndef M_PI #define M_PI 3.141592654 #endif ⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄⁄..
EnCypher tool (AES256, BASE64) C++ library w/ Sample. EnCypher 라고 이름은 거창 하긴 합니다만, 단지 AES-256 과 BASE-64 를 이용하는 Front-end c++ class library 에 막 가져다 붙인 이름 입니다. 용도는 AES-256 으로 암호화 한 정보를 다시 BASE-64 로 인코딩 한 문자열을 만들거나, 반대로 처리 하는걸 만들수 있습니다. 사용하려는 C++ 코드 위에 #inlcude "endetool.h" 를 추가 해 준 다음, EnDeTool class 를 할당해서 쓰면 됩니다. 여러 기능을 제공하고 있는데 주된 기능은 다음과 같습니다.문자열을 AES-256 과 BASE-64 로 암호화 또는 복호화 단순 데이터를 AES-256 으로 암호화 또는 복호화 아래의 소스코드는 바이너리 데이터를 암호/복호화 하는 것만 들어 있긴 합..
Apple의 SSL 긴급 update 로 알려진 goto 를 사용하는 나쁜 예. 불과 몇일 전 Apple 은 긴급히 iOS 7.0.5 에서 7.0.6 은 물론, iOS 6.1.5 와 6.1.4 를 사용하던 기기들 에 대해 SSL 버그를 수정한 update 를 수행 하였습니다. 이는 iPhone3Gs 부터 iPhone5s 까지 모든 기기에 해당 하는 update 였습니다만, 이 문제는 다름아닌 goto 를 사용하는 나쁜 습관을 가진 프로그래머로 부터 발생된 문제라 할 수 있겠습니다. Apple 쪽에서 사용되었던 SSL code 를 보면 다음과 같습니다. (공개된 부분에 한해) static OSStatus SSLVerifySignedServerKeyExchange(SSLContext *ctx, bool isRsa, SSLBuffer signedParams, uint8_t *signatu..
개발 능력의 저능화를 이끄는 대한민국 언젠가 부터 Android 의 영향 덕분인지 일반 PC (노트북 포함) 의 Linux kernel 이 3.x 를 넘어섰습니다. 회사에서는 특정 컴파일러의 dependency 때문에 kernel 을 바꾸질 못하고 있는데 한참이나 후진 Centrino (Dothern) CPU 를 쓰는 노트북에서 요즘 가장 인기 좋은 Linux Mint 를 쓰게 된 것이 사실 좀 뭔가 아이러니 한 느낌이 듭니다. Linux kernel 역사에 2.3, 2.4 와 2.6 은 천지개벽 수준의 발전 이었는데 3.x 를 넘어서는 그 차이를 잘 모르게 된것 또한 시대의 흐름이 보이지 않게 된듯 한 착각이 들기도 합니다. 처음 대학에 입학하던 1996년을 되돌아 보면 그때 부터 이 좁은 대한민국이란 나라에서는 뭔가 항상 특정 조건대로 ..
Porcess ID 로 해당 윈도우의 HWND 를 얻고 BMP 로 저장. 윈도우 프로그래밍을 하다보면 가끔 다른 윈도우의 화면을 갈무리 해야 하는 경우가 생깁니다. (Capture 처럼) 이럴때 아래의 코드 중 HWND GetHandleFromPID(DWORD pid); 함수를 사용하면 간단히 해당 프로그램의 HWND 를 얻을 수 있습니다. #include #include "winproc.h" typedef struct _ProcessCallbackData { DWORD m_pid; HWND m_hwnd; } ProcessCallbackData; BOOL CALLBACK EnumProc(HWND hwnd, LPARAM lParam) { DWORD pid = 0; ProcessCallbackData *pcbd = (ProcessCallbackData *)lParam; if ( ..
FLTK 1.3.x 를 위한 smooth image scaler: fl_smimg FLTK 1.3.x 버젼을 쓰면서 부족한 부분이 있다면 바로 Fl_Image 의 copy() 함수를 통한 scale 기능이라 하겠습니다. 실제 내부에서 이 scale 엔진은 GraphicDriver의 resize 를 호출 하는데 이 부분은 실제 nearest resize 가 수행 되므로 뭔가 부드럽게 연산이 처리된 형태의 이미지를 얻을수가 없게 됩니다. 이를 해결하기 위해 만든 것이 fl_smimg 이며, 이 소슨는 FreeImage Library 3 의 resize 부분을 추출 해서 FLTK 에 맞게 변경 하였으며, 그 적용은 아래 처럼 됩니다. 이미지는 인터넷에 도는 것을 임의로 사용하였는 상태 입니다. (우주선 이미지는 Mass Effect 의 Normandy 호 입니다 ) 먼저 Fl_Window ..