个人实验记录 | 数字图像处理实验一

个人实验记录 | 数字图像处理实验一代码


// Test1View.cpp: CTest1View 类的实现
//

#include "pch.h"
#include "framework.h"
// SHARED_HANDLERS 可以在实现预览、缩略图和搜索筛选器句柄的
// ATL 项目中进行定义,并允许与该项目共享文档代码。
#ifndef SHARED_HANDLERS
#include "Test1.h"
#endif

#include "Test1Doc.h"
#include "Test1View.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CTest1View

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::CTest1View() noexcept
{
	// TODO: 在此处添加构造代码
	m_pImage = NULL;
	m_Nsize = 0;
	m_Msize = 0;
}

CTest1View::~CTest1View()
{
	if (m_pImage != NULL)
		delete[] m_pImage;
}

BOOL CTest1View::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: 在此处通过修改
	//  CREATESTRUCT cs 来修改窗口类或样式

	return CView::PreCreateWindow(cs);
}

// CTest1View 绘图

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++)
		{
			
			
			//printf("%u",grey);
			//CString debugstr = CMapStringToString(grey);
			//OutputString(debugstr);

			/*grey = *(m_pImage + m_Nsize*i + j);
			pDC->SetPixelV(10 + j, 10 + i, RGB(grey, grey, grey));*/
			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));
			
		}
}


// CTest1View 打印

//void CTest1View::OnInitialUpdate()
//{
//	CScrollView::OnInitialUpdate();
//
//	//	CSize sizeTotal;
//		// TODO: calculate the total size of this view
//	//	sizeTotal.cx = sizeTotal.cy = 100;
//	//	SetScrollSizes(MM_TEXT, sizeTotal);
//	CSize sizeTotal(3000, 4000); // 3-by-4 cm
//	CSize sizeLine = CSize(sizeTotal.cx / 100, sizeTotal.cy / 100);
//	SetScrollSizes(MM_TEXT, sizeTotal, sizeTotal, sizeLine);
//	return;
//}
BOOL CTest1View::OnPreparePrinting(CPrintInfo* pInfo)
{
	// 默认准备
	return DoPreparePrinting(pInfo);
}

void CTest1View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: 添加额外的打印前进行的初始化过程
}

void CTest1View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: 添加打印后进行的清理过程
}


// CTest1View 诊断

#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 //_DEBUG


// CTest1View 消息处理程序


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);
	/*m_Nsize = 752;
	m_Msize = 600;*/
	/*m_Nsize = (int)sqrt(double(ndwSizeRaw));
	m_Msize = m_Nsize;
	
	while (m_Msize * m_Nsize != int(ndwSizeRaw) || m_Nsize % 4 != 0)
	{
		m_Nsize += 1;
		m_Msize = int(int(ndwSizeRaw) / m_Nsize);
	}*/
	TRACE("N=%d, M=%d\n", m_Nsize,m_Msize);

	Invalidate();
}


void CTest1View::OnFileSaveAs()
{
	// TODO: 在此添加命令处理程序代码
	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");
	}
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,作为一名AI语言模型,我无法进行数字信号处理matlab实验,但是我可以为您提供一些参考资料和指导思路。 数字信号处理是一门研究数字信号的处理方法和技术的学科,它广泛应用于音频、视频、图像等信号处理领域。在matlab中,我们可以使用一些工具箱和函数来进行数字信号处理实验。 以下是一些数字信号处理matlab实验的参考资料和指导思路: 1. 基本的信号处理实验:包括信号的采样、量化、傅里叶变换、数字滤波等基本操作。 2. 语音信号处理实验:包括语音信号的分析、合成、特征提取、语音识别等操作。 3. 图像信号处理实验:包括图像的滤波、边缘检测、图像增强、图像压缩等操作。 4. 视频信号处理实验:包括视频的分析、编码、解码、运动估计等操作。 在进行数字信号处理matlab实验时,我们需要掌握一些matlab工具箱和函数,如信号处理工具箱、波形绘制工具箱、图像处理工具箱等。同时,我们需要了解一些matlab编程技巧和算法知识,如傅里叶变换、离散余弦变换、小波变换等。 最后,我们还需要注意实验数据的准备和处理,如信号采集、数据预处理、数据清洗等。在实验过程中,我们需要仔细分析实验结果,评估实验效果,并对实验过程进行记录和总结。 希望以上的参考资料和指导思路对您有所帮助。如果您有任何问题或需要更详细的指导,可以随时向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值