void CCrabDlg::OnPaint() { CPaintDC dc(this); // device context for painting COLORREF white= RGB(255,255,255); if(m_bDisplayData) { int x,y; for(int i=0,ii=0;i < m_nbytes && ii < m_nBlocks;i += 81,ii++) { for(int j=0,m=0;j < 9*m_iBlocksize;j += m_iBlocksize,m++) // row { for(int k=0,n=0;k < 9*m_iBlocksize;k += m_iBlocksize,n++) // col { x= m_cp.x+ii*9*m_iBlocksize+j; y= m_cp.y+k; unsigned char ch= m_bdata[i+m*9+n]; COLORREF color= RGB(ch,ch,ch); // block gray level DrawBlock(&dc,x,y,m_iBlocksize,color); } } } m_bDisplayData= FALSE; } CDialog::OnPaint(); } void CCrabDlg::DrawBlock(CDC* pdc,int bx,int by,int size,COLORREF color) { for(int i=0;i < size;i++) for(int j=0;j < size;j++) pdc->SetPixel(bx+i,by+j,color); } BOOL CCrabDlg::ReadData(void) { FILE * fi= fopen((LPCSTR)m_strInputFile,"rt"); m_ndata=0; for(i=0;i < 2000;i++) { if(fscanf(fi,"%1d",&num) < 1) break; m_indata[i]= num; m_ndata++; } fclose(fi); } unsigned char CCrabDlg::bits2byte(int *bits,int len) { unsigned char bdata= 0; unsigned char ch; for(int i=0;i < len;i++) { if(bits[i]==1) { ch= 1; ch= ch << i; bdata |= ch; } } return(bdata); } void CCrabDlg::OnButtonDisplay() { int i,j; // flip the bits { for(i=0;i < m_ndata;i++) { if(m_indata[i] == 0) m_dispdata[i]= 1; else m_dispdata[i]= 0; } } //encode the bits into bytes m_nbytes= 0; for(i=0,j=0;i < m_ndata;i += 8,j++) { m_bdata[j]= bits2byte(&m_dispdata[i],8); m_nbytes++; } m_bDisplayData= TRUE; Invalidate(); }