solarizationprocess.cpp
来自「visual c++数字图像与图形处理中的光盘内容」· C++ 代码 · 共 85 行
CPP
85 行
/////////////////////////////////////////////////////////////////////////////////
//
// SolarizationProcess.cpp: implementation of the CSolarizationProcess class.
//
////////////////////////////////////////////////////////////////////////////////
// 版权所有(2002)
// Copyright(2002)
// 编写者: 向世明
// Author: Xiang Shiming
#include "stdafx.h"
#include "SolarizationProcess.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
IMPLEMENT_DYNAMIC(CSolarizationProcess,CImagePointProcess)
CSolarizationProcess::CSolarizationProcess()
{
m_dwOperation = IMAGE_COLOR_SOLARIZE;
m_byValve = 128;
}
CSolarizationProcess::~CSolarizationProcess()
{}
#ifdef _DEBUG
void CSolarizationProcess::Dump(CDumpContext& dc) const
{
CImagePointProcess::Dump(dc);
}
void CSolarizationProcess::AssertValid() const
{
CImagePointProcess::AssertValid();
}
#endif
BOOL CSolarizationProcess::Solarize(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;
*pbyBlue = (b < m_byValve) ? (255 - b) : b;
*pbyGreen = (g < m_byValve) ? (255 - g) : g;
*pbyRed = (r < m_byValve) ? (255 - r) : r;
}
dwBaseIndex += dwWidthBytes;
}
return TRUE;
}
void CSolarizationProcess::SetValve(BYTE byValveValue)
{
m_byValve = byValveValue;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?