个人实验记录 | 数字图像处理实验一代码
#include "pch.h"
#include "framework.h"
#ifndef SHARED_HANDLERS
#include "Test1.h"
#endif
#include "Test1Doc.h"
#include "Test1View.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
IMPLEMENT_DYNCREATE(CTest1View, CView)
BEGIN_MESSAGE_MAP(CTest1View, CView)
ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)
ON_COMMAND(ID_FILE_OPEN, &CTest1View::OnFileOpen)
ON_COMMAND(ID_FILE_SAVE_AS, &CTest1View::OnFileSaveAs)
END_MESSAGE_MAP()
CTest1View::CTest1View() noexcept
{
m_pImage = NULL;
m_Nsize = 0;
m_Msize = 0;
}
CTest1View::~CTest1View()
{
if (m_pImage != NULL)
delete[] m_pImage;
}
BOOL CTest1View::PreCreateWindow(CREATESTRUCT& cs)
{
return CView::PreCreateWindow(cs);
}
void CTest1View::OnDraw(CDC* pDC)
{
CTest1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
unsigned char grey;
unsigned char red,green,blue;
for (int i = 0; i < m_Nsize; i++)
for (int j = 0; j < m_Nsize; j++)
{
blue = *(m_pImage + m_Nsize * i * 3 + j * 3);
green = *(m_pImage + m_Nsize * i * 3 + j * 3 + 1);
red = *(m_pImage + m_Nsize * i * 3 + j * 3 + 2);
pDC->SetPixelV(10 + j, 10 + i, RGB(blue, green, red));
}
}
BOOL CTest1View::OnPreparePrinting(CPrintInfo* pInfo)
{
return DoPreparePrinting(pInfo);
}
void CTest1View::OnBeginPrinting(CDC* , CPrintInfo* )
{
}
void CTest1View::OnEndPrinting(CDC* , CPrintInfo* )
{
}
#ifdef _DEBUG
void CTest1View::AssertValid() const
{
CView::AssertValid();
}
void CTest1View::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CTest1Doc* CTest1View::GetDocument() const
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTest1Doc)));
return (CTest1Doc*)m_pDocument;
}
#endif
void CTest1View::OnFileOpen()
{
CFileDialog dlg(TRUE, _T("raw"), _T("*.raw"));
CFile file;
CImage image;
image.Load(dlg.GetPathName());
if (dlg.DoModal() == IDOK) {
VERIFY(file.Open(dlg.GetPathName(), CFile::modeRead));
}
DWORD ndwSizeRaw = (DWORD)file.GetLength();
m_pImage = new unsigned char[ndwSizeRaw];
file.Read(m_pImage, ndwSizeRaw);
file.Close();
double len = double(ndwSizeRaw) / 3;
m_Nsize = (int)sqrt(len);
TRACE("N=%d, M=%d\n", m_Nsize,m_Msize);
Invalidate();
}
void CTest1View::OnFileSaveAs()
{
DWORD ndwSizeRaw = m_Nsize * m_Msize;
WriteRawFile(m_pImage, ndwSizeRaw);
Invalidate();
return;
}
BOOL CTest1View::WriteRawFile(LPVOID lpvBits, DWORD ndwSizeRaw)
{
CFileDialog dlg(FALSE, _T("raw"), _T("*.raw"));
CFile RawFile;
if (dlg.DoModal() == IDOK) {
VERIFY(RawFile.Open(dlg.GetPathName(), CFile::modeCreate | CFile::modeWrite));
}
try {
RawFile.Write((LPVOID)lpvBits, ndwSizeRaw);
}
catch (CException* pe) {
pe->Delete();
AfxMessageBox(_T("write error!"));
RawFile.Close();
return FALSE;
}
RawFile.Close();
return TRUE;
return 0;
}
void OutputString(CString msg)
{
if (msg.IsEmpty() == false)
{
TRACE(msg);
TRACE("\n");
}
}