C# 更改Bitmap图像色彩模式

这篇具有很好参考价值的文章主要介绍了C# 更改Bitmap图像色彩模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

方法一:直接修改RGB的值

首先将BitmapData扫描线上的所有像素复制到字节数组中,然后遍历数组并对每个像素的RGB值进行修改,最后将修改后的像素值复制回BitmapData。这个过程不会影响原始的Bitmap对象,但会改变锁定的位图区域的数据。当完成修改后,应调用UnlockBits()方法释放锁定的位图区域。
 

System.Drawing.Bitmap bitBufferRGB = new System.Drawing.Bitmap("彩色Bitmap图像.jpg");
System.Drawing.Imaging.BitmapData data = bitBufferRGB.LockBits(
new System.Drawing.Rectangle(System.Drawing.Point.Empty, bitBufferRGB.Size),
System.Drawing.Imaging.ImageLockMode.ReadWrite, bitBufferRGB.PixelFormat);

//获取内存
IntPtr pData = data.Scan0;
int bytes = data.Stride * bitBufferRGB.Height;
byte[] rgbValues = new byte[bytes];

// Copy the RGB values into the array.
System.Runtime.InteropServices.Marshal.Copy(pData, rgbValues, 0, bytes);

for (int y = 0; y < bitBufferRGB.Height; y++)
{
    for (int x = 0; x < bitBufferRGB.Width; x++)
    {
        // 获取像素(x, y)在数组中的索引。
        int index = y * data.Stride + x * 3;

        // 修改RGB值。
        rgbValues[index] = (byte)(rgbValues[index] * 0.9); // 修改红色分量
        rgbValues[index + 1] = (byte)(rgbValues[index + 1] * 0.7); // 修改绿色分量
        rgbValues[index + 2] = (byte)(rgbValues[index + 2] * 0.9); // 修改蓝色分量
    }
}

// Copy the modified RGB values back to the bitmap.
System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, pData, bytes);

//解锁及释放资源
bitBufferRGB.UnlockBits(data);
bitBufferRGB.Dispose();

方法二:更换RGB的值位置

更换R和B的位置

System.Drawing.Bitmap bitBufferRGB = new System.Drawing.Bitmap("彩色Bitmap图像.jpg");
System.Drawing.Imaging.BitmapData data = bitBufferRGB.LockBits(
new System.Drawing.Rectangle(System.Drawing.Point.Empty, bitBufferRGB.Size),
System.Drawing.Imaging.ImageLockMode.ReadWrite, bitBufferRGB.PixelFormat);

//获取内存
IntPtr pData = data.Scan0;
int bytes = data.Stride * bitBufferRGB.Height;
byte[] rgbValues = new byte[bytes];
System.Runtime.InteropServices.Marshal.Copy(pData, rgbValues, 0, bytes);

for (int i = 0; i < height; i++)
{
    for (int ji = 0; ji < width; ji++)
    {
        int index = i * width + ji;
        // 每个像素占用三个字节
        // 红色字节
        rgbValues[index * 3] = System.Runtime.InteropServices.Marshal.ReadByte(pData, index * 3 + 2);
        // 绿色字节
        rgbValues[index * 3 + 1] = System.Runtime.InteropServices.Marshal.ReadByte(pData, index * 3 + 1);
        // 蓝色字节
        rgbValues[index * 3 + 2] = System.Runtime.InteropServices.Marshal.ReadByte(pData, index * 3);
    }
}
System.Runtime.InteropServices.Marshal.Copy(rgbValues, 0, pData, bytes);

//解锁及释放资源
bitBufferRGB.UnlockBits(data);
bitBufferRGB.Dispose();

 文章来源地址https://www.toymoban.com/news/detail-816279.html

 

 

 

 

到了这里,关于C# 更改Bitmap图像色彩模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图像色彩增强论文调研

    Deep Symmetric Network for Underexposed Image Enhancement with Recurrent Attentional Learning(ICCV2021) 使用对称编码器和解码器学习图像从低曝光转化到正常图片的映射方式,通过IFT(Invertible Feature Transformer)网络和提出模块RRAM学习到低曝光转化到正常图片映射关系; DPE-Deep Photo Enhancer Unpaired Le

    2024年02月11日
    浏览(29)
  • openCV 图像色彩空间转换

    cvtColor函数是OpenCV库中的一个函数,用于图像颜色空间的转换。它可以将一个图像从一个颜色空间转换为另一个颜色空间,比如将彩色图像转换为灰度图像、将BGR图像转换为HSV图像等 src:输入图像,可以是一个三通道的彩色图像或者一个单通道的灰度图像。 dst:输出图像,转

    2024年02月14日
    浏览(29)
  • opencv 图像色彩空间转化

    今天看了b站贾志刚的课,觉得不错,特地做学习笔记来和小伙伴分享 贾志刚的这个好像是2.0版本,30小时的,语言更加精炼,适合初级入门学习 第一节是常规安装   看他的步骤装就行了,记得配置完点应用再点确定,我第一次就是 没点然后就失败了,又得重配置一次 第二节就是基

    2024年02月22日
    浏览(35)
  • C# 手动解析灰度PNG图片为Bitmap

    当直接使用文件路径加载8位灰度PNG图片为Bitmap时,Bitmap的格式将会是Format32bppArgb,而不是Format8bppIndexed,这对一些判断会有影响,所以需要手动解析PNG的数据来构造Bitmap 若对PNG文件格式不是很了解,阅读本文前可以参考PNG的文件格式 PNG文件格式详解 简而言之,PNG文件头有

    2024年02月08日
    浏览(27)
  • 使用matlab实现图像信号的色彩空间转换

    下面的这个代码是在使用了rgb2hsi()方法失败后,进行修改的。 rgb2hsi(img)这个方法可以将RGB图像转换为HIS图像;但是爆出了 Untitled5(line 5)hsi = rgb2hsi(img)这个错误。 查了下可能是因Matlab版本不支持rgb2hsi函数。Matlab版本较旧,所以就手动实现RGB到HSI的转换。 通过分离RGB通道,将图

    2024年02月04日
    浏览(35)
  • 【音视频原理】图像相关概念 ③ ( RGB 色彩简介 | RGB 排列 | YUV 色彩简介 | YUV 编码好处 )

    RGB 是 计算机 中的 颜色编码方法 , 红 ( R ) / 绿 ( G ) / 蓝 ( B ) 三个颜色通道 可以设置不同的值 , 每个 通道 的 颜色值都可以取值 0 ~ 255 , 这样 三个通道 叠加 , 可以表示出 25 6 3 = 16777216 256 ^3 = 16777216 25 6 3 = 16777216 种颜色值 ; 红 ( R ) / 绿 ( G ) / 蓝 ( B ) 三个颜色通道 都取值 255

    2024年01月20日
    浏览(50)
  • 【图像处理】音视频色彩:RGB/YUV

    目录 1.RGB  1.1介绍        1.2分类 1.2.1RGB16 1)RGB565 2)RGB555 1.2.2RGB24 1.2.3RGB222 /

    2024年02月20日
    浏览(37)
  • 杰林码图像增强算法——超分辨率、图像放大、轮廓和色彩强化算法(二)

    2023-03-23我发布了基于加权概率模型(杰林码的理论模型)的图像颜色增强和轮廓预测的应用方法。效果还不太明显,于是我又花了2周的时间进行了技术优化。下面仅提供了x86下的BMP和JPG对应的lib和dll,本文中的算法属于我国自主的发明专利技术,商用必须获得授权,可提供

    2023年04月18日
    浏览(35)
  • C# 使用Bitmap 将byte[] 转成.jpg/.png/gif等图片

    在 C# 中,你可以使用 System.Drawing 命名空间中的 Bitmap 类来将 byte[] 转换为 .jpg 图片。以下是一个示例代码: 在上面的示例中,GetImageBytes 方法是一个用于获取图片的 byte[] 数据的示例方法。你需要根据实际情况自行实现该方法,从文件、网络等地方读取图片数据,并返回 byt

    2024年01月19日
    浏览(29)
  • 初学opencv c++学习笔记(二)图像空间色彩转换cvtColor()

    对图像的色彩转换用到cvtColor()函数,本章将对此其用法进行解析。 目录 一、色彩空间转换 官方定义  函数参数解释 代码演示 RGB——HSV  RGB——GRAY  BGR——RGB 总结 提示:以下是本篇文章正文内容,下面案例可供参考 APL:cvtColor() 1. src (source):输入的源图像。为矩阵形式。

    2024年02月05日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包