📄 renderprocess.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 + -