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

📄 ch16p1_imagemanipulatorkernels.cpp

📁 游戏开发特殊技巧-special.effects.game.programming
💻 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 + -