131 lines
2.5 KiB
C++
131 lines
2.5 KiB
C++
|
// Form2.cpp : implementation file
|
|||
|
//
|
|||
|
|
|||
|
#include "stdafx.h"
|
|||
|
#include "DN_sample.h"
|
|||
|
#include "Form2.h"
|
|||
|
|
|||
|
|
|||
|
// CForm2 dialog
|
|||
|
|
|||
|
IMPLEMENT_DYNAMIC(CForm2, CDialog)
|
|||
|
|
|||
|
CForm2::CForm2(CWnd* pParent /*=NULL*/)
|
|||
|
: CDialog(CForm2::IDD, pParent),hb(0)
|
|||
|
, m_img(nullptr)
|
|||
|
, m_type(0)
|
|||
|
{
|
|||
|
Create(IDD,pParent);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
CForm2::~CForm2()
|
|||
|
{
|
|||
|
}
|
|||
|
|
|||
|
void CForm2::DoDataExchange(CDataExchange* pDX)
|
|||
|
{
|
|||
|
CDialog::DoDataExchange(pDX);
|
|||
|
//DDX_Control(pDX, IDC_LIST1, m_listbox);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
BEGIN_MESSAGE_MAP(CForm2, CDialog)
|
|||
|
ON_WM_PAINT()
|
|||
|
//ON_LBN_SELCHANGE(IDC_LIST1, &CForm2::OnLbnSelchangeList1)
|
|||
|
|
|||
|
END_MESSAGE_MAP()
|
|||
|
|
|||
|
|
|||
|
BOOL CForm2::OnInitDialog()
|
|||
|
{
|
|||
|
CDialog::OnInitDialog();
|
|||
|
|
|||
|
ModifyStyle(WS_CAPTION, 0);
|
|||
|
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
// CForm2 message handlers
|
|||
|
|
|||
|
void CForm2::OnPaint()
|
|||
|
{
|
|||
|
//CDialog::OnPaint();
|
|||
|
ShowImage();
|
|||
|
|
|||
|
CPaintDC dc(this); // device context for painting
|
|||
|
|
|||
|
// 绘制边界线
|
|||
|
CRect rectClient;
|
|||
|
GetClientRect(&rectClient);
|
|||
|
|
|||
|
dc.DrawEdge(rectClient, EDGE_ETCHED, BF_RECT);
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
void CForm2::ShowOriginImg(MicroImage* img) {
|
|||
|
m_img = img;
|
|||
|
m_type = 0;
|
|||
|
ShowImage();
|
|||
|
}
|
|||
|
|
|||
|
void CForm2::ShowCalImg(MicroImage* img) {
|
|||
|
m_img = img;
|
|||
|
m_type = 1;
|
|||
|
ShowImage();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void CForm2::ShowImage() {
|
|||
|
|
|||
|
if (m_type > 1 || !m_img) return;
|
|||
|
if (m_type == 0 && !m_img->m_OriginData) return;
|
|||
|
if (m_type == 1 && !m_img->m_CalData) return;
|
|||
|
|
|||
|
|
|||
|
if (!hb) {
|
|||
|
BITMAPINFOHEADER bih = { 0 };
|
|||
|
bih.biSize = sizeof(BITMAPINFOHEADER);
|
|||
|
bih.biWidth = m_img->m_width;
|
|||
|
bih.biHeight = -m_img->m_height; // 负数表示图像是顶部向下的
|
|||
|
bih.biPlanes = 1;
|
|||
|
bih.biBitCount = 24; // RGB
|
|||
|
bih.biCompression = BI_RGB;
|
|||
|
bih.biSizeImage = m_img->m_width * m_img->m_height * 3; // 每个像素3字节
|
|||
|
|
|||
|
// 分配内存给BITMAPINFO
|
|||
|
BITMAPINFO* bmi = (BITMAPINFO*)malloc(sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256); // 假设有256种颜色,但对于24位RGB不需要RGBQUAD数组
|
|||
|
memcpy(&bmi->bmiHeader, &bih, sizeof(BITMAPINFOHEADER));
|
|||
|
|
|||
|
CDC* pDC = GetDC();
|
|||
|
uchar* data = (m_type == 0) ? m_img->m_OriginData : m_img->m_CalData;
|
|||
|
hb = CreateDIBitmap(pDC->m_hDC, &bih, CBM_INIT, data, bmi, DIB_RGB_COLORS);
|
|||
|
pDC->Detach();
|
|||
|
ReleaseDC(pDC);
|
|||
|
|
|||
|
free(bmi);
|
|||
|
}
|
|||
|
|
|||
|
GetClientRect(&r1);
|
|||
|
CPaintDC dc(this);
|
|||
|
BITMAP b;
|
|||
|
GetObject(hb, sizeof(b), &b);
|
|||
|
CDC cdc;
|
|||
|
cdc.CreateCompatibleDC(0);
|
|||
|
HGDIOBJ o = cdc.SelectObject(hb);
|
|||
|
SetStretchBltMode(dc, STRETCH_HALFTONE);
|
|||
|
dc.StretchBlt(0, 0, r1.right - r1.left, r1.bottom - r1.top, &cdc, 0, 0, b.bmWidth, b.bmHeight, SRCCOPY);
|
|||
|
cdc.SelectObject(o);
|
|||
|
cdc.DeleteDC();
|
|||
|
ReleaseDC(&cdc);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void CForm2::ClearImg() {
|
|||
|
if (hb != NULL) {
|
|||
|
DeleteObject(hb);
|
|||
|
hb = NULL;
|
|||
|
}
|
|||
|
}
|