调整图像亮度

2023-12-13

对于 Windows Phone 应用程序,当我通过滑块调整亮度时,它工作正常 将其移至右侧。但是当我回到之前的位置时,图像不是变暗,而是变得越来越亮。这是我基于像素操作的代码。

private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
    {

        wrBmp = new WriteableBitmap(Image1, null);


        for (int i = 0; i < wrBmp.Pixels.Count(); i++)
        {
            int pixel = wrBmp.Pixels[i];
            int B = (int)(pixel & 0xFF); pixel >>= 8;
            int G = (int)(pixel & 0xFF); pixel >>= 8;
            int R = (int)(pixel & 0xFF); pixel >>= 8;
            int A = (int)(pixel);

            B += (int)slider1.Value; R += (int)slider1.Value; G += (int)slider1.Value;
            if (R > 255) R = 255; if (G > 255) G = 255; if (B > 255) B = 255;
            if (R < 0) R = 0; if (G < 0) G = 0; if (B < 0) B = 0;
            wrBmp.Pixels[i] = B | (G << 8) | (R << 16) | (A << 24);
        }
        wrBmp.Invalidate();
        Image1.Source = wrBmp;

    }

我缺少什么以及滑块值是否有任何问题。我像往常一样在手机中处理小图像。我已经尝试过复制原始图像来复制图像。我认为代码是完美的,经过大量研究,我发现问题是由于滑块值引起的。可能的解决方案是将初始值分配给滑块。我需要一些代码帮助。

私有双lastSlider3Vlaue; 私人无效滑块3_ValueChanged(对象发送者,`RoulatedPropertyChangedEventArgs e) {

        if (slider3 == null) return;
        double[] contrastArray = { 1, 1.2, 1.3, 1.6, 1.7, 1.9, 2.1, 2.4, 2.6, 2.9 };
        double CFactor = 0;
        int nIndex = 0;
        nIndex = (int)slider3.Value - (int)lastSlider3Vlaue;
        if (nIndex < 0)
        {
            nIndex = (int)lastSlider3Vlaue - (int)slider3.Value;
            this.lastSlider3Vlaue = slider3.Value;
            CFactor = contrastArray[nIndex];
        }
        else
        {
            nIndex = (int)slider3.Value - (int)lastSlider3Vlaue;
            this.lastSlider3Vlaue = slider3.Value;
            CFactor = contrastArray[nIndex];
        }

        WriteableBitmap wbOriginal;
        wbOriginal = new WriteableBitmap(Image1, null);
        wrBmp = new WriteableBitmap(wbOriginal.PixelWidth, wbOriginal.PixelHeight);
        wbOriginal.Pixels.CopyTo(wrBmp.Pixels, 0);
        int h = wrBmp.PixelHeight;
        int w = wrBmp.PixelWidth;
        for (int i = 0; i < wrBmp.Pixels.Count(); i++)
        {
            int pixel = wrBmp.Pixels[i];
            int B = (int)(pixel & 0xFF); pixel >>= 8;
            int G = (int)(pixel & 0xFF); pixel >>= 8;
            int R = (int)(pixel & 0xFF); pixel >>= 8;
            int A = (int)(pixel);

            R = (int)(((R - 128) * CFactor) + 128);
            G = (int)(((G - 128) * CFactor) + 128);
            B = (int)(((B - 128) * CFactor) + 128);

            if (R > 255) R = 255; if (G > 255) G = 255; if (B > 255) B = 255;
            if (R < 0) R = 0; if (G < 0) G = 0; if (B < 0) B = 0;
            wrBmp.Pixels[i] = B | (G << 8) | (R << 16) | (A << 24);
        }

        wrBmp.Invalidate();
        Image1.Source = wrBmp;

}

经过调试发现,向前滑动时,r g b 值不断减小,而向后滑动时,r g b 值在应该增加的地方也在减小。 请帮助我自过去三个月以来一直致力于此工作。除此之外,您还给我关于如何完成整个图像处理的建议


你的算法是错误的。每次滑块值发生变化时,您都会将该值添加到图片的亮度中。使您的逻辑有缺陷的原因是滑块返回的值始终为正,并且您总是将亮度添加到same图片。

因此,如果滑块的起始值为 10,我会将图片的亮度加 10。

然后,我滑到 5。我将 5 添加到以前的照片亮度(您已经添加了 10 的亮度)。

解决问题的两种方法:

  1. 保留原始图片的副本,并在每次调用方法时复制它。然后将亮度添加到副本(而不是原件)。这是最安全的方法。

  2. 不要添加滑块的新绝对值,而是计算相对值(自上次调用该方法以来它改变了多少:

    private double lastSliderValue;
    
    private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
    {
        var offset = slider1.Value - this.lastSliderValue;
        this.lastSliderValue = slider1.Value;
    
        // Insert your old algorithm here, but replace occurences of "slider1.Value" by "offset"
    }
    

不过,第二种方法可能会引起一些头痛。您的算法将 RGB 值限制为 255。在这些情况下,您将丢失信息并且无法恢复到旧状态。例如,以滑块值为 255 的极端示例为例。该算法将所有像素设置为 255,从而生成白色图片。然后将滑块减小到 0,理论上这应该恢复原始图片。在本例中,您将每个像素减去 255,但由于每个像素的值都是 255,您最终会得到一张黑色图片。

因此,除非您找到一种巧妙的方法来解决第二个解决方案中提到的问题,否则我建议您使用第一个解决方案。

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

调整图像亮度 的相关文章

  • 如何在 XAML 中使用其他项目的图像?

    我正在构建一个包含多个项目的解决方案 Windows Phone 应用程序 其中一个项目是用于 品牌 的 它包含一些特定的代码和图像 其想法是该项目可以更换为不同的品牌 我的应用程序页面位于主项目中 我想在主应用程序的 UI 中显示存储在第
  • 演示如何在 C# 4.0 中使用新的“dynamic”关键字

    这是 4 0 版本中新的 C 未来 称为动态 告诉我如何在我的代码中使用它以及这个未来可以如何帮助我 相关问题 新的 dynamic C 4 0 关键字是否弃用了 var 关键字 https stackoverflow com questi
  • 任务.wait 和 continueWIth

    我有一个如下的任务 var task Task
  • WP7 MVVMCross 检测 ViewModel 内的 RequestClose 或 BackKeyPressed

    我有两种看法 我从一个导航到另一个 在另一个中我调用 RequestClose 或使用后退按键 如何在第一个 ViewModel 中检测到这些事件 问候 担 默认情况下 MvvmCross 框架不会告诉您此事件 您需要找出其他方法让 Vie
  • 科尔多瓦本地存储不持久

    我正在使用Windows Phone 7 sdk 和phonegap 开发混合移动应用程序 使用 Cordova 本地存储我正在存储价值 如果我关闭应用程序并在 Windows Phone 模拟器中再次启动 则存储的值不会保留 任何在 Wi
  • 用于动态视图数据/表单的 ASP.Net MVC 编辑器模板

    我正在实现一个 MVC3 Razor Web 应用程序 该应用程序检索用户可以从其他服务编辑的一些 字段 因此要在视图中编辑的属性列表是完全动态的并且在编译时未知 我编写了一些部分视图和 HTML 帮助程序 它们循环从其他服务检索到的组和属
  • 如何让我的 Windows Phone 7 应用程序出现在 Windows Phone 8 市场中?

    当我进行构建时 我一定做错了什么 我希望当前的更新适用于 Windows Phone 7 和 Windows Phone 8 我正在使用 WP8 SDK 并面向 OS 8 当我上传 XAP 时 我得到了 AnyCPU xap 现在我的应用程
  • C# 中负货币数字的全局变化格式

    我们有一个大型 ASP NET MVC 项目 其中输出到屏幕的所有数字都被格式化为货币 即 ToString c 但是 负数显示为 例如 decimal d 8 88m Console WriteLine d ToString c outp
  • 实体框架代码优先:如何手动更新数据库?

    我构建了一个小型 WPF 演示应用程序 它使用 EF Code First 将其数据保存在 SQL CE 4 0 DB 中 除非我从模型对象中删除属性 否则它工作正常 例如 如果我从此类中删除 HosteBy public class Di
  • 如果 html5

    我的应用程序隔离存储中有视频文件 并且想使用视频标签从 html 播放它 视频播放器运行 然后挂在 正在加载 有人可以设法使用 html5 视频标签和独立存储来播放视频吗 我的观察和测试 HTC HD7 Mango Beta 2 7 10
  • 如何重写List.Add方法?

    目前我有一个错误日志记录类 如下所示 public class Log public enum LogTypes Info 1 Error 2 Warning 3 public string Message get set public L
  • ListBox 内的 WP7 TextBlock 不换行文本

    我有一个ListBox其中有StackPanels 拿着一个TextBlock and an Image水平方向 然后是ContentPresenter XAML 如下所示
  • 如何在 WP7 应用程序磁贴中隐藏应用程序标题

    我不想在 Windows Phone 7 的磁贴中显示应用程序名称 就像 Netflix 或 Facebook 应用程序那样 但当我尝试将其设置为空 甚至是空白区域 时 Visual Studio 抱怨标题为空不允许 知道如何实现这一目标吗
  • 并行暴力算法

    所以我在看http codahale com how to safely store a password http codahale com how to safely store a password 并开始好奇在一台功能强大的台式计算
  • 如何实现快捷键的键盘处理程序cefSharp

    我正在构建一个用于浏览网页的 Windows 应用程序cefSharp 我需要在该应用程序中实现一些快捷键 任何人都可以告诉我如何实现此功能 Ex ctrl tab move to next tab 我能够跟踪用户是否按下任何单个键 但无法
  • Linq for xml 解析返回 null 元素

    我的 xml 文件如下所示
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 覆盖 Windows Phone 7 中的主题

    有没有办法让控件只使用深色或浅色主题 我正在开发一个大部分是深色的应用程序 我们有一些深色的自定义背景 所有文本块都已处理 它们始终是白色的 但是按钮 文本框 复选框 单选按钮 当手机主题设置为浅色时 所有这些都会变成黑色 并且几乎看不见
  • 服务器不支持 C# 中的安全连接

    我在下面的代码中收到错误 服务器不支持安全连接 SmtpClient smtp new SmtpClient MailMessage mail new MailMessage mail From new MailAddress gmail
  • Android 手机作为 GSM 调制解调器在 PC 上发送/接收短信?

    是否可以将 Android 移动设备用作 PC 上的 GSM 调制解调器 我正在 net下开发应用程序来发送 接收短信等 现在我想通过 USB 将我的 Android 设备连接到我的 PC 并将其用作 GSM 调制解调器来与其通信 这里是参

随机推荐

  • 仅应用jquery mobile 页面的一部分?

    我有一个示例页面 我们设计得很好 现在 我们只需要在页面的一部分中使用 jquery mobile 问题是 当我添加 jquery mobile 时 它 弄乱了我所有的 UI 内容 有没有办法只应用 jquery mobile 页面的一部分
  • 如何使用 Apache POI 设置数据透视表字段编号格式单元格

    我想设置数字格式单元格数据透视表的值字段余额总和 as 0 使用基于代码创建的数据透视表官方 POI 示例 CreatePivotTable 下面的代码做create and get CTPivotField pivotField 但如何设
  • Karate - 嵌套 JSON 对象模式验证导致 KarateException

    Feature Test Karate schema validation Scenario Test nested json objects def response read tasks json def schema ab strin
  • JSF 后退按钮 [重复]

    这个问题在这里已经有答案了 如何创建一个链接 将用户导航回一页 即与单击浏览器后退相同 Thanks 重点是 只需记住上一页的请求 URL 或 JSF viewId 以便您可以在输出 命令链接的 href 或值中使用它 有多种方法可以实现它
  • 如何获取包含的 FXML 的控制器?

    我有一个围绕 Java FXML 和 scenebuilder 构建的简单的两个选项卡应用程序 这些选项卡目前什么也不做 因为我在尝试加载它们时无法克服空指针异常 java 和 fxml 文件在 Netbeans 项目中的排列如下 主应用程
  • 如何在 GRid 视图的一列中显示两个属性 asp.net C#

    我有类 Person 有两个属性名字和姓氏 如果我将人员数组设置为 GridView 的数据源 如何在一列中显示名字和姓氏 Thanx 使用模板字段和 Eval 方法
  • 尽情玩耍!框架

    我们正在计划一个主要为移动应用程序提供内容的项目 但需要有一个网站 我的问题是 使用 Jersey 或 Restlet 为我们的移动应用程序开发 REST API 然后使用 Play 是否有意义 为网站提供服务 或者直接使用 Play 是否
  • 如何使用 iCloud 同步我的 sqlite 数据库和驻留在应用程序库文件夹中的文件夹中的图像

    我的要求是 我正在开发的应用程序在驻留在应用程序文件夹中的 Library 文件夹中创建一个名为 Private docmunets 的文件夹 该文件夹中有图像和一个 sqlite 文件 用于记录用户条目和图像 我必须启用我的应用程序 iC
  • 使用套接字进行 TCP 连接返回错误结果

    这是我用来扫描端口是否打开的代码 https stackoverflow com a 8957053 2203703 有人可以尝试修复它吗 似乎无法正常工作 即使端口关闭 代码也总是返回 成功连接 这是我用端口 80 测试过的 IP 列表
  • glutBitmapCharacter 位置文本错误

    我正在尝试在屏幕上绘制一个简单的字符串 覆盖 根据我在互联网上找到的信息 我是这样使用的 void write string text int x int y glRasterPos2i x y for int i 0 i lt text
  • R Bioconductor 安装错误 - 以“< DOCTYPE html PUBLI ...”开头的行格式错误

    我在 R 中安装 bioconductor 包时遇到问题 这是在 MacOSX 上 全新安装 R 2 15 并使用 bioconductor 1 4 4 文字记录如下 gt source http bioconductor org bioc
  • 自 Rails3 升级以来对空 params[] 哈希进行故障排除

    我有一个命名路由 可以在控制台中正确测试并显示应该包含在 params 中的 url title 但 params 始终为空 问题是 为什么 params 为空 我的期望是它应该有 params url title 我还删除了这条路线并使用
  • 致命:需要一次修改

    我的仓库有 3 次提交 我想压缩为一 I ran git rebase i HEAD 3并得到这个错误 fatal Needed a single revision invalid upstream HEAD 3 我能够跑git rebas
  • 创建一个包含 R 中多个矩阵的平均值的矩阵[重复]

    这个问题在这里已经有答案了 我有多个具有相同尺寸的矩阵 如下所示 gt A x y z 1 2 4 3 2 1 5 7 gt B x y z 1 4 3 3 2 1 8 7 gt C x y z 1 4 3 3 2 1 8 7 gt 如何创
  • VBA listobject不会添加行

    我有一个带有几张表的工作表 每张表都有两个表 listobjects 我还有一个用户窗体 允许用户在表中添加 编辑 删除行 这些表是静态的 这意味着它们永远存在并且永远不会被删除 它们位于同一位置并且永远不会移动 我还以不同的方式 通过索引
  • 分层抽样 - 观察不足

    我想要实现的是从每组中获取 10 的样本 这是 2 个因素的组合 新近度和频率类别 到目前为止我已经考虑过包裹sampling和功能strata 这看起来很有希望 但我收到以下错误 并且很难理解错误消息以及错误所在或如何解决此问题 这是我的
  • 如何卸载新 WooCommerce 2.3.x 加载的 select2 脚本/样式?

    我们是主题开发人员 我们已经使用 select2 http select2 github io 我们的 WordPress 主题中 HTML 中的 SELECT 框的脚本 刚刚发布的新 WooCommerce 2 3 x 现在也使用 sel
  • MSChart / Asp.net 图表不显示工具提示

    我有一个仪表板页面 我在其中使用各种 MSCharts 我为每个图表定义了一个类 当我运行每个图表类并定义其系列属性时 我在该图表中定义系列的工具提示 如下所示 Series 0 ToolTip Date VALX d nTotal Qty
  • ICommand CanExecuteChanged 未更新

    我正在尝试 MVVM 模式基础级别 并对 ICommand CanExecute 更改感到震惊 我的 XAML 绑定如下
  • 调整图像亮度

    对于 Windows Phone 应用程序 当我通过滑块调整亮度时 它工作正常 将其移至右侧 但是当我回到之前的位置时 图像不是变暗 而是变得越来越亮 这是我基于像素操作的代码 private void slider1 ValueChang