使用 GDI+ 和 C# 更改图像对比度

2024-03-05

我的问题如下:

我正在制作一个程序,可以通过 C# 代码操纵亮度、伽玛和对比度。对于亮度和伽玛来说还可以。我已经通过在网上找到的代码实现了它,但我不能进行对比。

到目前为止我唯一发现的是CalculateRamp方法,其输入参数(double level, double brightness, double gamma, double contrast)。我知道要为亮度、伽马和对比度(界面中滑块的值)提供什么输入,但我不知道级别是什么。

这种方法的另一个问题是,当我通过随机计算的斜坡时level参数作为参数SetDeviceGammaRamp(IntPtr hDC,ref RAMP rmp)它实际上改变了屏幕对比度,但是当我移动亮度滑块时,对比度滑块所做的更改就会丢失。可能是因为使用相同的方法或者我不确定是什么。

我将非常感谢任何帮助或想法,无论它们是对我当前不完整的解决方案的更改,还是一个全新的解决方案 - 我更喜欢 - 因为我在某种程度上对此感到不确定。预先感谢大家。

这是代码CalculateRamp方法,作为函数SetDeviceGammaRamp(...)我调用它来操纵与当前计算的斜坡的对比度。我不确定是否必须以这种方式使用它:

public static void CalculateRamp(double level, double gamma, double brightness, double contrast)
{
    ramp.Red = new ushort[256];
    ramp.Green = new ushort[256];
    ramp.Blue = new ushort[256];

    gamma /= 10;
    brightness = 1 + (((brightness - 50) / 100) * 65535);
    contrast = 1 + ((contrast - 50) / 100);
    level = 1 + ((level - 50) / 100);

    for (int i = 0; i < 256; i++)
    {
        double value = i * 256;
        value = (Math.Pow(value / 65535, 1 / gamma) * 65535) + 0.5;
        value = ((((value / 65535) - 0.5) * contrast) + 0.5) * 65535;
        value = value += brightness;
        value *= level;
        ramp.Red[i] = ramp.Green[i] = ramp.Blue[i] = (ushort)Math.Min((double)65535, Math.Max((double)0, value));
    }
    SetDeviceGammaRamp(GetDC(IntPtr.Zero), ref ramp);
}

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 GDI+ 和 C# 更改图像对比度 的相关文章

  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • 将内置类型转换为向量

    我的 TcpClient 类接受vector
  • 单元测试一起运行时失败,单独运行时通过

    所以我的单元测试遇到了一些问题 我不能只是将它们复制并粘贴到这里 但我会尽力而为 问题似乎是 如果我一项一项地运行测试 一切都会按预期进行 但如果我告诉它一起运行测试 则 1 5 将通过 TestMethod public void Obj
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • 使用 C 语言使用 strftime() 获取缩写时区

    我看过this https stackoverflow com questions 34408909 how to get abbreviated timezone and this https stackoverflow com ques
  • 如何在 C# 中定义文本框数组?

    您好 当我在 Windows 申请表上创建文本框时 我无法将其命名为 box 0 box 1 等 我这样做的目的是因为我想循环使用它们 其实我发现TextBox array firstTextBox secondTextBox 也有效
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • 如何将整数转换为 void 指针?

    在 C 中使用线程时 我面临警告 警告 从不同大小的整数转换为指针 代码如下 include
  • C++:.bmp 到文件中的字节数组

    是的 我已经解决了与此相关的其他问题 但我发现它们没有太大帮助 他们提供了一些帮助 但我仍然有点困惑 所以这是我需要做的 我们有一个 132x65 的屏幕 我有一个 132x65 的 bmp 我想遍历 bmp 并将其分成小的 1x8 列以获
  • 将 log4net 与 Autofac 结合使用

    我正在尝试将 log4net 与 Autofac 一起使用 我粘贴了这段代码http autofac readthedocs org en latest examples log4net html http autofac readthed
  • 如何编写一个同时需要请求和响应Dtos的ServiceStack插件

    我需要提供本地化数据服务 所有本地化的响应 Dto 都共享相同的属性 IE 我定义了一个接口 ILocalizedDto 来标记那些 Dto 在请求端 有一个ILocalizedRequest对于需要本地化的请求 Using IPlugin
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • Process.Start() 方法在什么情况下返回 false?

    From MSDN https msdn microsoft com en us library e8zac0ca v vs 110 aspx 返回值 true 表示有新的进程资源 开始了 如果由 FileName 成员指定的进程资源 St
  • 如何在 C# 中调整图像大小同时保持高质量?

    我从这里找到了一篇关于图像处理的文章 http www switchonthecode com tutorials csharp tutorial image editing saving cropping and resizing htt
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N
  • 使用 GROUP 和 SUM 的 LINQ 查询

    请帮助我了解如何使用带有 GROUP 和 SUM 的 LINQ 进行查询 Query the database IEnumerable
  • 使用 GhostScript.NET 打印 PDF DPI 打印问题

    我在用GhostScript NET http ghostscriptnet codeplex com打印 PDF 当我以 96DPI 打印时 PDF 打印效果很好 但有点模糊 如果我尝试以 600DPI 打印文档 打印的页面会被极大地放大
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个

随机推荐

  • 使用 PHP/CodeIgniter 显示具有多对多关系的两个表中的数据

    我正在两个表之间建立简单的连接 第一个名为 users 的表具有字段 编号 名称 第二个名为 groups 的表具有相同的字段 编号 名称 它们之间的关系是多对多的 因为一个用户可以属于多个 感兴趣的 组 并且一个组将包含多个用户 所以我有
  • 正确使用 QUnit throw() 断言?

    使用 QUinit 的throw https api qunitjs com throws 断言我想测试是否抛出错误以及错误消息 我有以下功能 Error function for Node param String msg Error m
  • 如何在浏览网页时保持屏幕常亮

    我有一个网络应用程序 可将文本流式传输到网页 用于远程文本解释 我有什么办法可以让用户在访问网页时保持屏幕打开吗 最受关注的是 iOS 和 Android 等移动客户端 但 OSX 和 Windows 也有较小程度的担忧 有一个技巧 如果网
  • CActiveForm 及其行为没有名为“getErrors”的方法或闭包。

    你好 我对 yii 框架很陌生 目前正在尝试通过数据库身份验证建立登录 但我反复收到此错误 C异常 CActiveForm 及其行为没有名为的方法或闭包 获取错误 任何人都可以帮我吗 这是控制器
  • 如何使用亚马逊MWS获得FBA费用和佣金

    我将从亚马逊提取订单详细信息并将其存储在数据库中 我正在获取除亚马逊物流费用和订单佣金之外的所有数据 谁能指导我如何获得 FBA 费用和佣金 佣金是您每两周收到的结算报告的一部分 我没有使用 FBA 但我认为 FBA 费用也会包含在适用的情
  • FluidMoveBehavior 可用吗?

    我在我的代码中调用了 Grid SetRow 和 Grid SetColumn 我正在尝试对其进行动画处理 根据答案http social msdn microsoft com Forums en CA wpf thread 257779f
  • python实体处理后如何将数据保存到stl文件中?

    我需要在 python 上处理 openscad 程序 我使用实体库 https solidpython readthedocs io en latest index html https solidpython readthedocs i
  • 安全删除 StackView 转换中使用的 QML 组件

    Overview 我的问题涉及一个人的一生QObject由 制作QQmlComponent create http doc qt io qt 5 qqmlcomponent html create 1 返回的对象create 是一个实例化Q
  • 使用 mongo-go-driver,如何有效地从 WriteError 中检索重复的字段名称?

    我的收藏中有三个独特的索引 当用户不小心插入字段中重复的数据时B 我怎么知道重复项来自字段B 在违反唯一索引约束时 mongo go driver 行为返回错误WriteException 它基本上由 WriteError 数组和一些其他对
  • SftpClient.UploadFile 和 SftpClient.WriteAllBytes 有什么区别?

    当我使用 SSH NET 通过 SFTP 传输文件时 我观察到一些奇怪的行为 我正在使用 SFTP 将 XML 文件传输到另一个服务 我不控制 进行处理 如果我使用SftpClient WriteAllBytes该服务抱怨该文件不是有效的
  • 如何在reportlab、python中创建具有不同页面大小的PDF文档

    是否可以在reportlab中创建具有不同页面大小的PDF文档 我想创建一个文档 其中第一页的尺寸与其他页面的尺寸不同 有人可以帮忙吗 是的 这应该是可能的 因为 PDF 支持这一点 这只是如何在 ReportLab 中实现它的问题 我从来
  • Ajp 收到带有签名的无效消息

    我使用的是 Tomcat 7 0 29 前端是 Apache 2 2 22 modproxy 在 httpd conf 中将 Ajp 配置为协议 在 server xml 中将 AjpNioProtocol 配置为 AjpNioProtoc
  • 连接到 pyqtSignal 的 lambda 中对象的生命周期

    假设我有一个对象 并希望在发出 PyQt 信号时执行其方法之一 假设我希望它使用信号未传递的参数来执行此操作 所以我创建了一个 lambda 作为信号槽 class MyClass object def init self model mo
  • 仅使用页面数据通过 Javascript 触发浏览器的“另存为”对话框

    作为页面输出的一部分 我在文本区域中包含了数据表的 CSV 格式版本 以便用户可以轻松地将 CSV 导出复制 粘贴到他们选择的电子表格中 我想要一种方法 有一个按钮 当单击该按钮时 将触发 另存为 对话框 该对话框将下载页面文本区域中已存在
  • 动态数组:使用 realloc() 无内存泄漏

    我使用 realloc 来调整分配的内存大小 char get channel name void char result int n result char 0 for elem snd mixer first elem handle n
  • 在快速中间件中记录请求和响应

    我正在尝试实现一个记录器Express http expressjs com应用 我需要它能够记录请求以及为每个请求发回的响应 状态代码和正文 我开始编写一个如下所示的中间件 function req res next res on fin
  • 从数据库检索数据时如何转义特殊字符?

    我将根据从 SQL Server 返回的数据生成 XML 文件 但有一些特殊字符 例如 x1F and x1C 可能还有其他类似的字符 这将使 XML 失败 有什么办法可以逃离他们吗 Thanks 控制字符 U 001C 文件分隔符 和 U
  • 在Java中一次向ArrayList添加多个项目[重复]

    这个问题在这里已经有答案了 如何一次向 ArrayList 添加多个项目 ArrayList
  • 如何从虚拟环境 (virtualenv) 启动 python Idle

    我有一个从虚拟环境安装的软件包 如果我只是启动 python 解释器 则可以很好地导入该包 但是 如果我启动 Idle 则无法导入该包 因为它仅在一个特定的 virtualenv 中可用 而不是在全局中可用 如何从 virtualenv 启
  • 使用 GDI+ 和 C# 更改图像对比度

    我的问题如下 我正在制作一个程序 可以通过 C 代码操纵亮度 伽玛和对比度 对于亮度和伽玛来说还可以 我已经通过在网上找到的代码实现了它 但我不能进行对比 到目前为止我唯一发现的是CalculateRamp方法 其输入参数 double l