15,979
社区成员
发帖
与我相关
我的任务
分享
//Init bitmap head;
m_bmpInfo.bmiHeader.biHeight = m_Hei;
m_bmpInfo.bmiHeader.biWidth = m_Wid;
m_bmpInfo.bmiHeader.biCompression = BI_RGB;
m_bmpInfo.bmiHeader.biBitCount = 24;
m_bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
m_bmpInfo.bmiHeader.biPlanes = 1;
m_bmpInfo.bmiHeader.biSizeImage = m_Hei*m_Wid*3;
m_bmpInfo.bmiHeader.biClrUsed = 0;
m_bmpInfo.bmiHeader.biClrImportant = 0;
//if input image is one channel,then convert it to 3 channels to show in the dst Window;
if(1 == m_Channel)
{
for(int i = 0; i < m_Hei; i++)
for(int j = 0; j < m_Wid; j++)
for(int c = 0; c < 3; c++)
{
m_srcImagergb[i][j][c] = m_srcImagegray[i][j];
}
}
//save pixels' rgb value in sequence;reverse sequence;
//unsigned char* image = new unsigned char[m_Hei*m_Wid*3];
unsigned char*** image = qx_allocu_3(m_Hei,m_Wid,3);
memset(image[0][0],0,sizeof(unsigned char)*m_Hei*m_Wid*3);
for(int i = 0; i < m_Hei; i++)
for(int j = 0; j < m_Wid; j++)
for(int c = 0; c < 3; c++)
{
image[m_Hei-i-1][j][c] = m_srcImagergb[i][j][2-c];
//image[(m_Hei-i-1)*m_Wid*3 +j*3+c] = m_srcImagergb[i][j][2-c];//b,g,r;
}
//saveimage_ppm("rgb.ppm",image,m_Hei,m_Wid);
CDC *pDC = m_srcWnd->GetDC();
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap bmp;
bmp.CreateCompatibleBitmap(pDC, m_srcWndRect.Width(), m_srcWndRect.Height());
CBitmap *pOldBmp = MemDC.SelectObject(&bmp);
DWORD ERR = StretchDIBits(MemDC.GetSafeHdc(),0, 0, m_srcWndRect.Width(), m_srcWndRect.Height(), 0, 0, m_bmpInfo.bmiHeader.biWidth,
m_bmpInfo.bmiHeader.biHeight, image[0][0], &m_bmpInfo, DIB_RGB_COLORS,SRCCOPY);
pDC->BitBlt(0, 0, m_srcWndRect.Width(), m_srcWndRect.Height(), &MemDC, 0, 0, SRCCOPY);
qx_freeu_3(image);
#if 1 // biBitCount = 24
void CEdgeDetectionDlg::ShowSrcImage()
{
//Init bitmap head;
ZeroMemory(&m_bmpInfo, sizeof(BITMAPINFO));
int wid1=(m_Wid + 3) & ~3;// 420 !!
m_bmpInfo.bmiHeader.biHeight = m_Hei;
m_bmpInfo.bmiHeader.biWidth = wid1;//420 !!
m_bmpInfo.bmiHeader.biCompression = BI_RGB;
m_bmpInfo.bmiHeader.biBitCount = 24;// !!
m_bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
m_bmpInfo.bmiHeader.biPlanes = 1;
m_bmpInfo.bmiHeader.biSizeImage = m_Hei*wid1*3;// !!
//if input image is one channel,then convert it to 3 channels to show in the dst Window;
if(1 == m_Channel)
{
for(int i = 0; i < m_Hei; i++)
for(int j = 0; j < m_Wid; j++)
for(int c = 0; c < 3; c++)
{
m_srcImagergb[i][j][c] = m_srcImagegray[i][j];
}
}
//save pixels' rgb value in sequence;reverse sequence;
//unsigned char* image = new unsigned char[m_Hei*m_Wid*3];
unsigned char*** image = qx_allocu_3(m_Hei,wid1,3);
memset(image[0][0],0,sizeof(unsigned char)*m_Hei*wid1*3);
for(int i = 0; i < m_Hei; i++)
for(int j = 0; j < m_Wid; j++)
for(int c = 0; c < 3; c++)
{
image[m_Hei-i-1][j][c] = m_srcImagergb[i][j][2-c];
}
//saveimage_ppm("rgb.ppm",image,m_Hei,m_Wid);
CDC *pDC = m_srcWnd->GetDC();
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap bmp;
bmp.CreateCompatibleBitmap(pDC, m_srcWndRect.Width(), m_srcWndRect.Height());
CBitmap *pOldBmp = MemDC.SelectObject(&bmp);
//
DWORD ERR = StretchDIBits(MemDC.GetSafeHdc(),0, 0, m_srcWndRect.Width(), m_srcWndRect.Height(),
0, 0, m_Wid /* not Wid1 ! */, m_Hei,image[0][0], &m_bmpInfo, DIB_RGB_COLORS,SRCCOPY);
if(ERR==GDI_ERROR)
{
DWORD errcode=GetLastError();
}
pDC->BitBlt(0, 0, m_srcWndRect.Width(), m_srcWndRect.Height(), &MemDC, 0, 0, SRCCOPY);
qx_freeu_3(image);
}
#else // biBitCount = 32
void CEdgeDetectionDlg::ShowSrcImage()
{
//Init bitmap head;
ZeroMemory(&m_bmpInfo, sizeof(BITMAPINFO));
m_bmpInfo.bmiHeader.biHeight = m_Hei;
m_bmpInfo.bmiHeader.biWidth = m_Wid;// 417 !!
m_bmpInfo.bmiHeader.biCompression = BI_RGB;
m_bmpInfo.bmiHeader.biBitCount = 32;// !!
m_bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
m_bmpInfo.bmiHeader.biPlanes = 1;
m_bmpInfo.bmiHeader.biSizeImage = m_Hei*m_Wid*4;// !!
//if input image is one channel,then convert it to 3 channels to show in the dst Window;
if(1 == m_Channel)
{
for(int i = 0; i < m_Hei; i++)
for(int j = 0; j < m_Wid; j++)
for(int c = 0; c < 3; c++)
{
m_srcImagergb[i][j][c] = m_srcImagegray[i][j];
}
}
// *4 !!!
unsigned char*** image = qx_allocu_3(m_Hei,m_Wid,4);
memset(image[0][0],0,sizeof(unsigned char)*m_Hei*m_Wid*4);
for(int i = 0; i < m_Hei; i++)
for(int j = 0; j < m_Wid; j++)
for(int c = 0; c < 3; c++)
{
image[m_Hei-i-1][j][c] = m_srcImagergb[i][j][2-c];
//image[(m_Hei-i-1)*m_Wid*3 +j*3+c] = m_srcImagergb[i][j][2-c];//b,g,r;
}
//saveimage_ppm("rgb.ppm",image,m_Hei,m_Wid);
CDC *pDC = m_srcWnd->GetDC();
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap bmp;
bmp.CreateCompatibleBitmap(pDC, m_srcWndRect.Width(), m_srcWndRect.Height());
CBitmap *pOldBmp = MemDC.SelectObject(&bmp);
//ScreenToClient(&m_srcWndRect);
DWORD ERR = StretchDIBits(MemDC.GetSafeHdc(),0, 0, m_srcWndRect.Width(), m_srcWndRect.Height(), 0, 0,
m_Wid, m_Hei, image[0][0], &m_bmpInfo, DIB_RGB_COLORS,SRCCOPY);
if(ERR==GDI_ERROR)
{
DWORD errcode=GetLastError();
}
pDC->BitBlt(0, 0, m_srcWndRect.Width(), m_srcWndRect.Height(), &MemDC, 0, 0, SRCCOPY);
qx_freeu_3(image);
}
#endif
void CEdgeDetectionDlg::ShowSrcImage()
{
//Init bitmap head;
ZeroMemory(&m_bmpInfo, sizeof(BITMAPINFO));
// m_Wid &= ~3;// 417 to 416
m_bmpInfo.bmiHeader.biHeight = m_Hei;
m_bmpInfo.bmiHeader.biWidth = m_Wid;// 417
m_bmpInfo.bmiHeader.biCompression = BI_RGB;
m_bmpInfo.bmiHeader.biBitCount = 32;
m_bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
m_bmpInfo.bmiHeader.biPlanes = 1;
m_bmpInfo.bmiHeader.biSizeImage = m_Hei*m_Wid*4;//
//if input image is one channel,then convert it to 3 channels to show in the dst Window;
if(1 == m_Channel)
{
for(int i = 0; i < m_Hei; i++)
for(int j = 0; j < m_Wid; j++)
for(int c = 0; c < 3; c++)
{
m_srcImagergb[i][j][c] = m_srcImagegray[i][j];
}
}
//save pixels' rgb value in sequence;reverse sequence;
//unsigned char* image = new unsigned char[m_Hei*m_Wid*3];
unsigned char*** image = qx_allocu_3(m_Hei,m_Wid,4);
memset(image[0][0],0,sizeof(unsigned char)*m_Hei*m_Wid*4);
for(int i = 0; i < m_Hei; i++)
for(int j = 0; j < m_Wid; j++)
for(int c = 0; c < 3; c++)
{
image[m_Hei-i-1][j][c] = m_srcImagergb[i][j][2-c];
//image[(m_Hei-i-1)*m_Wid*3 +j*3+c] = m_srcImagergb[i][j][2-c];//b,g,r;
}
//saveimage_ppm("rgb.ppm",image,m_Hei,m_Wid);
CDC *pDC = m_srcWnd->GetDC();
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap bmp;
bmp.CreateCompatibleBitmap(pDC, m_srcWndRect.Width(), m_srcWndRect.Height());
CBitmap *pOldBmp = MemDC.SelectObject(&bmp);
//ScreenToClient(&m_srcWndRect);
DWORD ERR = StretchDIBits(MemDC.GetSafeHdc(),0, 0, m_srcWndRect.Width(), m_srcWndRect.Height(), 0, 0, m_bmpInfo.bmiHeader.biWidth,
m_bmpInfo.bmiHeader.biHeight, image[0][0], &m_bmpInfo, DIB_RGB_COLORS,SRCCOPY);
if(ERR==GDI_ERROR)
{
DWORD errcode=GetLastError();
}
pDC->BitBlt(0, 0, m_srcWndRect.Width(), m_srcWndRect.Height(), &MemDC, 0, 0, SRCCOPY);
qx_freeu_3(image);
//delete []image;
}