2012-08-14 2 views
-1

C++ : 비트 세트 변수가 비트 셋 변수 대신 사용되면 (올바르게!) 프로그램이 작동하지 않는 것 같습니다.

// 작업 목적으로이 코드를 일부 수정했습니다. 나는 당신이 monocrome 이미지 내로 8bpp를 이미지를 분할해야하는 이유 당신이 다음에 save_bmp의 기능을 변경하지만 경우, 이해가 아주 확실하지 않다

+3

-1 : 이것은 좋은 SO 질문에 대한 너무 많은 코드입니다. 문제를 나타내는 최소 수준으로 코드를 줄입니다. – thiton

+1

이 실제로이 문제를 일으키는 최소 코드 금액입니까? 약간 부풀어 오른 것 같습니다. – stefan

+7

질문을 닫지 않게하기 위해 현상금을 게시하는 것은 디버거를 사용하고 최소한의 테스트 사례를 작성하는 것을 배우는 것만 큼 생산적이지 않습니다. –

답변

7

은, 적어도 "유효"하는 이미지

void save_bmp(char *fname, BITMAPFILEHEADER *header, BITMAPINFOHEADER *info, 
    std::bitset<N> *image) 
{ 
    FILE *file_ptr = fopen(fname, "wb"); 
    fwrite(header, sizeof(BITMAPFILEHEADER), 1, file_ptr); 
    fwrite(info, sizeof(BITMAPINFOHEADER), 1, file_ptr); 
    fwrite(&create_palette(0,0,0), sizeof(RGBQUAD), 1, file_ptr); 
    fwrite(&create_palette(255,255,255), sizeof(RGBQUAD), 1, file_ptr); 

    //fwrite(image, N, 1, file_ptr); 
    unsigned char * b = pack(image); 
    fwrite(b,N/8,1,file_ptr); 
    delete[] b; 

    fclose(file_ptr); 
} 
을 생산

std : 비트 세트는 객체이며 버퍼가 아닙니다. 비트 세트를 버퍼에 압축하는 팩 기능이 이미 있으므로 파일에 객체를 쓰는 대신이를 사용하는 것이 자연스러운 것처럼 보였습니다.

+0

이것은 트릭을 수행하는 것 같습니다.이 작업을 수행하는 논리는 무엇입니까? – Louis93

+1

이유를 설명하기 위해 대답의 끝 부분을 편집했습니다. – TheSteve