Convolute.cpp
上传用户:yatsl7111
上传日期:2007-01-08
资源大小:1433k
文件大小:2k
源码类别:

图形图象

开发平台:

Visual C++

  1. // 未完成文件
  2. #include "stdafx.h"
  3. #include "Convolute.h"
  4. #include "math.h"
  5. void _fnSPE_Convolute(int *red,int *green,int *blue,int i,int j,
  6. WORD wBytesPerLine,LPBYTE lpData,KERNEL *lpKernel)
  7. {
  8. BYTE b[9],g[9],r[9];
  9. LONG lOffset;
  10. lOffset=(LONG)(i-1)*(LONG)wBytesPerLine+(LONG)((j-1)*4);
  11. b[0]=*(lpData+lOffset++);
  12. g[0]=*(lpData+lOffset++);
  13. r[0]=*(lpData+lOffset);
  14. lOffset=(LONG)(i-1)*(LONG)wBytesPerLine+(LONG)((j)*4);
  15. b[1]=*(lpData+lOffset++);
  16. g[1]=*(lpData+lOffset++);
  17. r[1]=*(lpData+lOffset);
  18. lOffset=(LONG)(i-1)*(LONG)wBytesPerLine+(LONG)((j+1)*4);
  19. b[2]=*(lpData+lOffset++);
  20. g[2]=*(lpData+lOffset++);
  21. r[2]=*(lpData+lOffset);
  22. lOffset=(LONG)(i)*(LONG)wBytesPerLine+(LONG)((j-1)*4);
  23. b[3]=*(lpData+lOffset++);
  24. g[3]=*(lpData+lOffset++);
  25. r[3]=*(lpData+lOffset);
  26. lOffset=(LONG)(i)*(LONG)wBytesPerLine+(LONG)((j)*4);
  27. b[4]=*(lpData+lOffset++);
  28. g[4]=*(lpData+lOffset++);
  29. r[4]=*(lpData+lOffset);
  30. lOffset=(LONG)(i)*(LONG)wBytesPerLine+(LONG)((j+1)*4);
  31. b[5]=*(lpData+lOffset++);
  32. g[5]=*(lpData+lOffset++);
  33. r[5]=*(lpData+lOffset);
  34. lOffset=(LONG)(i+1)*(LONG)wBytesPerLine+(LONG)((j-1)*4);
  35. b[6]=*(lpData+lOffset++);
  36. g[6]=*(lpData+lOffset++);
  37. r[6]=*(lpData+lOffset);
  38. lOffset=(LONG)(i+1)*(LONG)wBytesPerLine+(LONG)((j)*4);
  39. b[7]=*(lpData+lOffset++);
  40. g[7]=*(lpData+lOffset++);
  41. r[7]=*(lpData+lOffset);
  42. lOffset=(LONG)(i+1)*(LONG)wBytesPerLine+(LONG)((j+1)*4);
  43. b[8]=*(lpData+lOffset++);
  44. g[8]=*(lpData+lOffset++);
  45. r[8]=*(lpData+lOffset);
  46. *red=*green=*blue=0;
  47. for(int k=0;k<8;++k)
  48. {
  49. *red+=lpKernel->Element [k]*r[k];
  50. *green+=lpKernel->Element [k]*g[k];
  51. *blue+=lpKernel->Element [k]*b[k];
  52. }
  53. if(lpKernel->Divisor !=1)
  54. {
  55. *red/=lpKernel->Divisor ;
  56. *green/=lpKernel->Divisor ;
  57. *blue/=lpKernel->Divisor ;
  58. }
  59. *red=abs(*red);
  60. *green=abs(*green);
  61. *blue=abs(*blue);
  62. }