EGE毛玻璃效果

测试一下项目上传系统。

效果如下(受图片大小限制被迫糊成一团):

QQ截图20200228233143.jpg

该项目仅供参考,正确写法是使用getbuff而不是一堆putpixel和getpixel。

  1. #include <graphics.h>
  2.  
  3. PIMAGE glass(PIMAGE t){
  4. //创建增量数组 
  5. int ax[]={-1,0,1,-1,1,-1,0,1};
  6. int ay[]={-1,-1,-1,0,0,1,1,1};
  7. PIMAGE f=newimage(getwidth(t),getheight(t));//创建储存边缘的对象 
  8. PIMAGE ft=newimage(getwidth(t)-2,getheight(t)-2);//创建储存中部图像的对象 
  9. color_t c;
  10. int r;
  11. int xt,yt;
  12. f=t;//此处我们不取出边缘所有的点,而是直接克隆 
  13. //随机取点 
  14. for(int y=1;y<getheight(t)-1;y++){
  15. for(int x=1;x<getwidth(t)-1;x++){
  16. r=random(8);
  17. xt=x+ax[r];
  18. yt=y+ay[r];
  19. c=getpixel(xt,yt,t);
  20. putpixel(x-1,y-1,c,ft);
  21. }
  22. }
  23. putimage(f,2,2,ft);//将处理好的中部图像直接盖在f上,f的中部被ft覆盖,故f中只剩下未处理的边缘和处理好的中部 
  24. delimage(ft);
  25. return f;
  26. }
  27.  
  28. int main(){
  29. initgraph(500,500,0);
  30. PIMAGE t=newimage();
  31. PIMAGE f=newimage();
  32. getimage(t,"Image.png");
  33. initgraph(getwidth(t),getheight(t));
  34. setcaption("毛玻璃滤镜效果");
  35. getimage(f,t,getwidth(t)/2,0,getwidth(t),getheight(t));
  36. imagefilter_blurring(f,0xFF,0x100,0,0,0,0);//处理前先将图片模糊 
  37. for(int i=0;i<3;i++)
  38. f=glass(f); 
  39. putimage(t,getwidth(t)/2,0,f);
  40. putimage(0,0,t);
  41. saveimage(t,"hfile.jpg");
  42. getch();
  43. }