java 浮雕_C#图像处理之浮雕效果实现方法
本文实例讲述了C#图像处理之浮雕效果实现方法。分享给大家供大家参考。具体如下:
//定义浮雕处理函数
public Bitmap PFudiao(Bitmap a)
{
try
{
int w = a.Width;
int h = a.Height;
Bitmap dstBitmap = new Bitmap(w, h, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
System.Drawing.Imaging.BitmapData srcData = a.LockBits(new Rectangle
(0, 0, w, h), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
System.Drawing.Imaging.BitmapData dstData = dstBitmap.LockBits(new Rectangle
(0, 0, w, h), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
unsafe
{
byte* pIn = (byte*)srcData.Scan0.ToPointer();
byte* pOut = (byte*)dstData.Scan0.ToPointer();
byte* p;
int stride = srcData.Stride;
for (int y = 0; y < h; y++)
{
for (int x = 0; x < w; x++)
{
//边缘八个点像素不变
if (x == 0 || x == w - 1 || y == 0 || y == h - 1)
{
pOut[0] = pIn[0];
pOut[1] = pIn[1];
pOut[2] = pIn[2];
}
else
{
int r0, r1;
int g1, g0;
int b1, b0;
double vR, vG, vB;
//右
p = pIn - 3;
r1 = p[2];
g1 = p[1];
b1 = p[0];
//中心点
p = pIn;
r0 = p[2];
g0 = p[1];
b0 = p[0];
//使用模板
vR = Math.Abs(r0 - r1+128);
vG = Math.Abs((g0 - g1 + 128));
vB = Math.Abs((b0 - b1 + 128));
if (vR > 0)
{
vR = Math.Min(255, vR);
}
else
{
vR = Math.Max(0, vR);
}
if (vG > 0)
{
vG = Math.Min(255, vG);
}
else
{
vG = Math.Max(0, vG);
}
if (vB > 0)
{
vB = Math.Min(255, vB);
}
else
{
vB = Math.Max(0, vB);
}
pOut[0] = (byte)vB;
pOut[1] = (byte)vG;
pOut[2] = (byte)vR;
}
pIn += 3;
pOut += 3;
}
pIn += srcData.Stride - w * 3;
pOut += srcData.Stride - w * 3;
}
}
a.UnlockBits(srcData);
dstBitmap.UnlockBits(dstData);
return dstBitmap;
}
catch (Exception e)
{
MessageBox.Show(e.Message.ToString());
return null;
}
}
原图:
效果图:
希望本文所述对大家的C#程序设计有所帮助。
java 浮雕_C#图像处理之浮雕效果实现方法相关推荐
- java 伴随矩阵_C#计算矩阵的逆矩阵方法实例分析
本文实例讲述了C#计算矩阵的逆矩阵方法.分享给大家供大家参考.具体如下: 1.代码思路 1)对矩阵进行合法性检查:矩阵必须为方阵 2)计算矩阵行列式的值(Determinant函数) 3)只有满秩矩阵 ...
- java基于OpenCv图像处理_读取_保存图片
java基于openCv图像处理_读取_保存图片 本文使用javaCV封装后的OpenCv <dependency><groupId>org.bytedeco</grou ...
- Java中类、常量、变量、方法名等命名规则
Java中类.常量.变量.方法名等命名规则 命名规则: 命名由字母.数字.下划线.美元符号($)构成. 命名不可以数字作为开头. 长度无限制,但不可存在空格. 大小写所表述内容含义不同. 命名不可与J ...
- “ Error:(1, 1) java: 非法字符: ‘\ufeff‘ ”错误的解决方法
前言:今天为了做作业,在 github 上面下载了个项目,然后在运行项目时发现报错,在此记录一下 " Error:(1, 1) java: 非法字符: '\ufeff' "错误的解 ...
- java 匿名list,java创造匿名对象的两种方法
在java中有时候需要一些匿名对象的使用.可能有些小伙伴拿还不会创造,其实我们在学习一些方法时都或多或少的接触过.本篇所要讲到的创造匿名对象总结了两种方法,分别是静态工具方法和Lambda表达式,我们 ...
- Java遍历Map对象的四种方法
在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都实现了Map接口,以下方法适用于任何map实现(HashMap, TreeMap, LinkedHa ...
- 将Java程序变成可执行文件的一个简单方法
将Java程序变成可执行文件的一个简单方法 运行Java程序(SWING或SWT的桌面程序)可以直接执行.class文件或将所有的.class文件及相关的其他文件压缩成.jar文件,然后使用javaw ...
- 完美解决Invalid layout of java.lang.String at value问题的方法
完美解决Invalid layout of java.lang.String at value问题的方法 参考文章: (1)完美解决Invalid layout of java.lang.String ...
- java.util.ConcurrentModificationException异常原因及解决方法
java.util.ConcurrentModificationException异常原因及解决方法 参考文章: (1)java.util.ConcurrentModificationExceptio ...
最新文章
- Red Hat Linux 挂载外部资源
- 两天入门Python基础(附代码实现)
- 简单的JavaScript互斥锁
- Generative Adversarial Learning Towards Fast Weakly Supervised Detection(CVPR2018)阅读笔记
- Windows下启动,关闭Nginx命令
- nodejs 实践项目_NodeJS:最佳生产实践
- [转][Python小记] 通俗的理解闭包 闭包能帮我们做什么?
- jar编译成exe可执行文件【图文教程】
- Linux进程的管理与调度(三) -- Linux进程ID号
- shortcutwebsite
- 丰田造世界首辆意志控制变速自行车
- __wakeup绕过版本_PHP__wakeup()方法
- Java 根据输入的a、b、c,计算三角形面积和周长。根据程序上下文以及输入输出样例,填写程序空白,使程序完整
- GitHub设置代理 提升速度
- torch_points_kernels遭遇 ModuleNotFoundError: No module named ‘torch_points_kernels.points_cpu‘
- 教师节我用Python做了个学生点名系统送给老师当礼物,这回毕业稳了
- Android开机启动检测和连接wifi检测
- 教你用html+js制作一个自己的点名系统,实例代码分享
- 【c++入门(2)】关联容器map
- 【车载以太网】【测试】Vector测试方案