Friday, June 19, 2015

Managed C++ 디버깅하기(브레이크포인트 안걸릴때)

C#과 Managed C++을 연동할때 C#에서는 브레이크포인트가 걸리는데 Managed C++ 단독으로는 브레이크포인트가 안걸릴 때가 있다.

그럴때는 다음과 같이 2가지 절차를 거친다.
1. Managed C++의 속성창에서 Debugging - Debugger Type에 Mixed로 설정한다.

2. Visual Studio의 옵션에서 Debugging - Use Managed Compatibility Mode를 체크한다.

Wednesday, June 17, 2015

Freetype 문자열 픽셀 길이 구하기

int penx = 0;
    for (int i = 0; i < wcslen(wstr); i++) {
        if (len > 0 && i >= len)
            break;
        FT_Load_Char(face, wstr[i], FT_LOAD_NO_BITMAP);// 문자열 width 테스트용
        penx += face->glyph->advance.x >> 6;
    }
return penx;

Freetype 안티 알리아싱(anti aliasing) 적용 안하기

bool glyphBit(const FT_GlyphSlot &glyph, const int x, const int y)
{
    int pitch = abs(glyph->bitmap.pitch);
    unsigned char *row = &glyph->bitmap.buffer[pitch * y];
    char cValue = row[x >> 3];
    return (cValue & (128 >> (x & 7))) != 0;
}

for (int idx = 0; idx < wcslen(wstr); idx++) {
//FT_Load_Char(face, wstr[idx], FT_LOAD_RENDER | FT_LOAD_NO_BITMAP);// 이렇게 하면 anti-aliasing 적용됨
FT_Load_Char(face, wstr[idx], FT_LOAD_RENDER | FT_LOAD_MONOCHROME | FT_LOAD_TARGET_MONO);
int width = face->glyph->bitmap.width;
int height = face->glyph->bitmap.rows;

for (int i = 0; i < height; i++) {//y
for (int j = 0; j < width; j++) {//x
 
// 비트별로 8비트 팩되어 있으므로 그것을 풀어냄
bool value = glyphBit(face->glyph, j, i);
 
// true일 경우 글자 칠해진 픽셀
if (value)
{
// 이제 까만 영역이므로 색칠을 하자
int xx = face->glyph->bitmap_left + j;
int yy = FREETYPE_SIZE - face->glyph->bitmap_top + i;
int idx = tgt->wid*yy + xx;
pimg[idx] = 1;
}
}
}

Tuesday, June 16, 2015

Visual C++에서 iconv 사용하여 wchar_t 변환하기

Visual C++에서는 wchar_t로 유니코드를 사용한다. 그런데 유닉스나 모바일 호환성을 위해서 Win32 API가 아닌 iconv로 인코딩을 변환하다보면 에러가 발생한다.

그럴때는 다음과 같이 tocode에 "UTF-8" 대신에 "WCHAR_T"를 입력하면 된다.
char str[] = "두덕리온라인";
TCHAR str2[4096];
iconv_convert("WCHAR_T", "EUC-KR", str, (char*)str2, 4096 * 2);

현재 사용하고있는 iconv 래퍼 함수이다.
int iconv_convert(const char* tocode, const char* fromcode, const char* instr, char* outbuf, size_t outlen)
{
    iconv_t cd = iconv_open(tocode, fromcode);
    if (cd == (iconv_t)(-1)) {
        //LOG("iconv_open error");
        return -1;
    }

    // 이거 왜이렇게 했지? 내부적으로 버퍼를 사용함
    char inbuf[BUF_SIZE];
    sprintf(inbuf, "%s", instr);

    // 포인터만 기록해 놓음
    const char *in = inbuf;
    size_t inlen = strlen(in);

    // 메모리 초기화
    memset(outbuf, 0, outlen);
    char *out = outbuf;

    if (iconv(cd, &in, &inlen, &out, &outlen) < 0) {
        //LOG("iconv error");
        return -1;
    }

    iconv_close(cd);
    return 0;
}

Monday, June 15, 2015

Visual Studio 2013 C4996 에러 완벽 해결법

C4996에러는 Visual Studio 2005버전부터 unsafe한 함수를 다른 함수로 대체하라는 명령이다.

warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

에러 메세지를 보면 define등으로 정의를 해주어야 하는데 그럴 필요없이 다음과 같이 컴파일러 옵션에서 SDL(Secure Development Lifecycle) checks을 끄면 자동으로 해결 된다.





Friday, June 12, 2015

맥북프로레티나 15인치 구입(애플 ME293KH/A)

드디어 염원하던 맥북프로레티나(맥프레) 15인치를 구입했다. 사양은 인텔 i7에 256GB SSD를 장착한 모델이다. ODD는 없다. 이게 약간의 단점이다.

레티나 디스플레이를 처음 써보는데 글씨가 너무 선명했다. 그런데 윈도우를 패러랠즈에 깔면은 처음에 해상도가 너무 작아서 적응이 안되는데 확대적용을 설정해서 하면 무리없이 잘된다. 정말 최고의 개발용 노트북이다. 이것으로 Xcode로 아이폰용 앱도 개발해야겠다. ​

가격은 공식 앱스토어나 일본 앱스토어를 거치지 않고 오픈마켓에서 무이자 할부를 이용했다.​

























Monday, June 1, 2015

포토웍스 1.75 다운로드

다운로드

Visual Studio 2010 IDE 최적화(3/3) - WPF(XAML)

Visual Studio 2010 최적화의 3편, WPF(XAML)언어 최적화이다.

1. 먼저 Options - Text Editor - XAML - Apply Cut or Copy commands to blacnk lines when there is no selection을 끈다.

2. Formatting에서 자동완성과 관련된 기능들을 전부 끈다.

3. 기타 자동완성 기능을 끈다. 그리고 XAML 최적화에서 중요한 게 Always open documents in full XAML view를 끄는 것이다. 이는 XAML 파일을 열었을 때 언제나 UI디자인 에디터가 나오게 되던 것을 XAML 텍스트 편집을 우선 나오게 함으로서 UI 에디팅시 최적화를 제공한다.