📄 ch16p1_imagemanipulatorkernels.cpp
字号:
#include "Ch16p1_ImageManipulatorKernels.h"
#include "Ch16p1_ImageManipulator.h"
D3DXCOLOR CImageManipulatorKernel::ApplyKernelToPoint(D3DXCOLOR &finalcolor, int iKernelWidth, int iKernelHeight,
CImageManipulator *manip)
{
D3DXCOLOR runningtotal; runningtotal *= 0.0f; // clear it!
std::vector<float>::iterator i = m_KernelValues.begin();
for (int y=0; y < iKernelWidth; y++) {
for (int x=0; x < iKernelHeight; x++) {
D3DXCOLOR pixcolor = manip->ReadPixelRel(((int)(-iKernelWidth/2))+x,((int)(-iKernelHeight/2))+y);
pixcolor *= (float)(*i);
runningtotal += pixcolor;
i++;
}
}
return(runningtotal);
}
////////////////////////////////////////////////////////////////////
CBlurKernel::CBlurKernel()
{
for (int y=0; y < 3; y++) {
for (int x=0; x < 3; x++) {
m_KernelValues.push_back(1.0f/9.0f);
}
}
}
void CBlurKernel::ProcessPixel(D3DXCOLOR &finalcolor, CImageManipulator *manip)
{
finalcolor = ApplyKernelToPoint(finalcolor, 3, 3, manip);
}
////////////////////////////////////////////////////////////////////
CExtraBlurKernel::CExtraBlurKernel()
{
for (int y=0; y < 5; y++) {
for (int x=0; x < 5; x++) {
m_KernelValues.push_back(1.0f/25.0f);
}
}
}
void CExtraBlurKernel::ProcessPixel(D3DXCOLOR &finalcolor, CImageManipulator *manip)
{
finalcolor = ApplyKernelToPoint(finalcolor, 5, 5, manip);
}
////////////////////////////////////////////////////////////////////
CSharpeningKernel::CSharpeningKernel()
{
for (int y=0; y < 3; y++) {
for (int x=0; x < 3; x++) {
m_KernelValues.push_back((x == 1 && y == 1) ? 9.0f : -1.0f);
}
}
}
void CSharpeningKernel::ProcessPixel(D3DXCOLOR &finalcolor, CImageManipulator *manip)
{
finalcolor = ApplyKernelToPoint(finalcolor, 3, 3, manip);
}
////////////////////////////////////////////////////////////////////
CEdgeDetectionKernel::CEdgeDetectionKernel()
{
m_KernelValues.push_back(0.0f);
m_KernelValues.push_back(-1.0f);
m_KernelValues.push_back(0.0f);
m_KernelValues.push_back(-1.0f);
m_KernelValues.push_back(9.0f);
m_KernelValues.push_back(-1.0f);
m_KernelValues.push_back(0.0f);
m_KernelValues.push_back(-1.0f);
m_KernelValues.push_back(0.0f);
}
void CEdgeDetectionKernel::ProcessPixel(D3DXCOLOR &finalcolor, CImageManipulator *manip)
{
finalcolor = ApplyKernelToPoint(finalcolor, 3, 3, manip);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -