⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 renderprocess.cpp

📁 visual c++数字图像与图形处理中的光盘内容
💻 CPP
字号:
/////////////////////////////////////////////////////////////////////////////////
//
// RenderProcess.cpp: implementation of the CRenderProcess class.
//
////////////////////////////////////////////////////////////////////////////////
// 版权所有(2002)
// Copyright(2002)
// 编写者: 向世明
// Author: Xiang Shiming

#include "stdafx.h"
#include "RenderProcess.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
IMPLEMENT_DYNAMIC(CRenderProcess, CImagePointProcess)
CRenderProcess::CRenderProcess()
{
	m_dwOperation = IMAGE_COLOR_RENDER;
	m_byRed = 255;
	m_byGreen = 255;
	m_byBlue = 255;
}

CRenderProcess::~CRenderProcess()
{}

#ifdef _DEBUG
void CRenderProcess::Dump(CDumpContext& dc) const
{
	CImagePointProcess::Dump(dc);
}

void CRenderProcess::AssertValid() const
{
	CImagePointProcess::AssertValid();
}
#endif

void CRenderProcess::SetRenderColor(BYTE byRed,  BYTE byGreen,  BYTE byBlue)
{
	m_byRed = byRed;
	m_byGreen = byGreen;
	m_byBlue = byBlue;
}


//着色图像, 即过滤指定区域(x,  y,  nWidth,  nHeight)的颜色.
//nScanWidth------数据扫描宽度
//nScanHeight-----可扫描高度
BOOL CRenderProcess::Render(LPBYTE lpbyBits32,  int x,  int y,  int nWidth,  int nHeight,  int nScanWidth,  int nScanHeight)
{
	ASSERT(lpbyBits32);
	//第一步, 进行参数合法性检测
	if((x > (nScanWidth - 1)) || (y > (nScanHeight - 1))) return FALSE;
	//有效区域的宽度和高度
	int w = min(nWidth, nScanWidth - x);
	int h = min(nHeight, nScanHeight - y);

	//行字节数
	DWORD dwWidthBytes = (DWORD)nScanWidth * 4;

	//开始数据基索引
	DWORD dwBaseIndex = y * dwWidthBytes + 4 * x;

	//第二步, 着色修改
	for(int i = 0;i < h;i++)
	{
		BYTE* pbyRsc = lpbyBits32 + dwBaseIndex;

		for(int j = 0;j < w;j++)
		{
			BYTE* pbyBlue = pbyRsc++;
			BYTE* pbyGreen = pbyRsc++;
			BYTE* pbyRed = pbyRsc++;
			pbyRsc++;

			BYTE r = *pbyRed;
			BYTE g = *pbyGreen;
			BYTE b = *pbyBlue;
			BYTE gray = (BYTE)(((WORD)r * 30 + (WORD)g * 59 + (WORD)b * 11) / 100);

			*pbyBlue = (BYTE)(((WORD)m_byBlue * (WORD)gray) / 255);
			*pbyGreen = (BYTE)(((WORD)m_byGreen * (WORD)gray) / 255);
			*pbyRed = (BYTE)(((WORD)m_byRed * (WORD)gray) / 255);
		}
		dwBaseIndex += dwWidthBytes;
	}
	return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -