C# 如何把 图处理成 反相呢?????????????????????????????????????????????????????????

生财 2008-07-09 10:13:50
C# 如何把 图处理成 反相呢?????????????????????????????????????????????????????????

和 pHOTOSHOP 裏的 反向功能一樣
...全文
249 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
h_w_king 2008-07-10
  • 打赏
  • 举报
回复
private void fx(Bitmap g)
{
for(int i=0;i<g.Width;i++)
for (int j = 0; j < g.Height; j++)
{
Color c = g.GetPixel(i, j);
Color cc=Color.FromArgb(255-c.R,255-c.G,255-c.B);
g.SetPixel(i,j,cc);
}

}
Code従業員 2008-07-10
  • 打赏
  • 举报
回复
可能我笨,LS好像是说把图片倒过来吧?
生财 2008-07-10
  • 打赏
  • 举报
回复
Bitmap 格式的
生财 2008-07-10
  • 打赏
  • 举报
回复
謝謝樓上

這是我寫的可以反相的代碼

        /// <summary>
/// 反相图片
/// 2008-7-9
/// daonidedie
/// </summary>
public void Reverse()
{
BitmapData bmData = bmpobj.LockBits(new Rectangle(0, 0, bmpobj.Width, bmpobj.Height),
ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
int stride = bmData.Stride;
System.IntPtr Scan0 = bmData.Scan0;
unsafe
{
byte* p = (byte*)(void*)Scan0;
int nOffset = stride - bmpobj.Width * 3;
int nWidth = bmpobj.Width * 3;
for (int y = 0; y < bmpobj.Height; ++y)
{
for (int x = 0; x < nWidth; ++x)
{
p[0] = (byte)(255 - p[0]);
++p;
}
p += nOffset;
}
}
bmpobj.UnlockBits(bmData);
}
nodman 2008-07-10
  • 打赏
  • 举报
回复
你的图是什么格式,Bitmap?
从原理上说,图像反色就是求R G B这3个分量与255的差,的绝对值
R' = |255 - R|
B' = |255 - B|
G' = |255 - G|

但是要对应到实际操作,要看具体Bitmap的颜色格式,比如是16位还是24位还是32位
颜色空间是RGB,还是YUV还是灰度还是什么。
如果是索引颜色(Indexed),那就更麻烦一点,要改写Palette
源码免费下载链接为: https://pan.xunlei.com/s/VOZApRyujBOa2dk25PPIJ0gCA1?pwd=hjt2 一、 程序环境## 程序性质:采用C#语言开发的WPF桌面程序#### 开发平台:Visual Studio 2015、GDAL库、.Net Framework 4.5#### 运行环境:Windows 8.1及以上版本#### 二、 程序目的 该库属于一款开源库,它能够达对任意格式像文件的读取操作,其中涵盖了遥感像。本程序借助该库来读取遥感像,并运用相关技术实现一些核心的像功能,具体包含: 遥感像及普通像的读取:达对遥感像的读取以及选择波段进行处理的功能,同时实现对大部分常见像格式的读取 像基本操作:达像平移、缩放等各类常见操作 遥感像增强处理:达灰度拉伸、变换、像平滑、像锐化、边缘增强、反相等一系列增强处理 三、 设计思路## 1) 程序运用相关技术来开发桌面应用程序,界面采用相应方式编写,以此实现界面与业务逻辑的分离### 2) 程序包含若干个主要模块### 遥感像读取模块:运用相关技术读取遥感像,这一步骤所得到的结果为数据集 像内部存储模块: 包括将读取到的内容处理能够进行处理的数据集以及波段信息的提取,此外,为了能将像显示在相关控件上,还需要把数据集转换为另一种数据集 界面事件模块: 这一层面实质上是实现了界面事件与业务逻辑之间的交互 处理模块: 作为业务逻辑层,编写了灰度拉伸、变换、像平滑、像锐化、边缘增强、反相像增强处理的函数 3) 程序采用事件机制来驱动运行### 四、 实现过程## 1) 读取模块### 运用库中的方法打开遥感文件,并将其存储为数据集; 借助相关方式获取像容器的宽度和高度; 利用相应手段获取像的波段信息,将这些波段信息作为波段选择窗口的构造
【资源说明】 1、项目源码在上传前,都经过本地功运行,功能测试ok。请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、机械电子信息等相关专业背景的在校大学生、专业老师 行业从业人员等下载使用。 3、用途:项目代表性强,具有创新性和启发性,故具有挺高的学习借鉴价值。不仅适合小白入门进阶,还可作为毕设项目、课程设计、大作业、比赛初期项目立项演示等。 4、如果基础还不错,又热爱学习钻研,也可基于此项目基础上进行修改进行二次开发。 本人也是技术狂热者,如果觉得此项目对您有价值,欢迎下载使用! 无论您是运行还是二次开发,部署过程若遇到问题,请及时私信交流,欢迎学习。 基于C#开发的遥感处理软件源码+详细项目说明(WPF课程设计项目).zip 程序性质:C# 开发的 WPF 桌程序#### ####开发平台:Visual Studio 2015、GDAL库、.Net Framework 4.5#### ####运行环境:Windows 8.1 以上#### ##二、 【程序目的】 ####`GDAL` 库是一个开源库,它能够实现读取任意格式的像文件,包括遥感像,本程序利用 `GDAL` 库来读取遥感像,使用 `C#` 实现一些核心像的功能,包括: 1. 遥感像及普通像读取:实现读取 `.img` 遥感像及选择波段进行处理,实现读取大部分常见像格式 2. 像基本操作:实现像平移、缩放等常见操作 3. 遥感像增强处理:实现灰度拉伸、`HIS`变换、像平滑、像锐化、边缘增强、反相等增强处理 ##三、 【设计思路】## ###1) 程序使用`C#`来开发`WPF`桌面应用程序,界面使用`XAML`编写,实现界面与业务逻辑分离### ###2) 程序包括几个主要模块### 1. 遥感像读取模块:使用`GDAL`读取遥感像,这一步的结果是`DataSet`数据集 2. 像内部存储模块: 包括将读取的`DataSet`处理`C#`能够处理的`BitMap`数据集及波段信息的提取,另外为了将像显示在`WPF`的`Image`控件上,还需将`BitMap`数据集转换为`BitMapImage`数据集 3. 界面事件模块: 这一层实质上是实现了界面事件与业务逻辑的交互 4. 处理模块: 业务逻辑层,编写了灰度拉伸、`HIS`变换、像平滑、像锐化、边缘增强、反相像增强处理的函数 ###3) 程序使用事件机制驱动### ##四、 【实现过程】## ###1) 读取模块### 1. 使用`GDAL`库的`Gdal.Open`方法打开遥感文件,将之存储为`datase`数据集; 2. 利用`System.Drawing.Rectangle`获取像容器的宽高; 3. 利用`dataSet.GetMetadata`获取像的波段信息,将波段信息作为波段选择窗口的构造函数实例化一个新的波段选择窗口,用户可自由选择显示波段; 4. 定义一个`int`类型的数组存储用户选择的波段信息,使用遥感像读取模块的主要类`ImageOperate`中的`ImageOperate.GetImage`方法来将`DataSet`数据集转化为`Bitmap`数据集,该方法需要传入三个参数,`DataSet`数据集,选择的三个波段序号,以及由像容器的宽高创建的矩形; 5. 在`ImageOperate.GetImage`函数内部,按照波段信息将像像素点存入内存,利用`C#`的`BitMap`类转化为`BitMap`数据集; 6. 调用`BitmapToBitmapSource`方法将`BitMap`数据集转化为`BitMapImage`数据集;需要注意的是,如果读取的像没有波段信息,或者是普通像,那么读取的直接是`BitMap`数据集而不是`DataSet`数据集,那么就可以直调用`BitmapToBitmapSource`方法; 7. 将转换的`BitMapImage`数据集作为`WPF`像控件`Image`的`Resource`,实现像在界面上的加载; 8. 这一模块的主要流程是: 菜单点击事件(打开文件)-> `OpenFileDialog`选择文件 -> `Gdal.Open`获取`DataSet`数据集 -> `System.Drawing.Rectangle` 由像容器的宽高创建的矩形 -> `dataSet.GetMetadata` 获取像波段信息 -> 实例化波段选择窗口,用户选择显示波段 -> 根据以上信息使用 `ImageOperate.GetImage` 生`BitMap`数据

111,119

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧