c# 遥感数字图像彩色合成以及灰阶显示——bitmap

https://blog.csdn.net/zhanghanx/article/details/80807759一文中,介绍了如何读取envi标准数据格式的影像图,接下来介绍如何使用这些数据进行彩色合成显示以及灰度图像的显示。

一、彩色合成

1、首先数据转换,在前面的文章中,像素值的存储方式是BSQ,但是想要通过bitmap显示的话,像素值的排列必须是BIP,并且三种颜色的顺序是BGR(千万不要弄错了,否则合成的图像是不对的)。

2、根据生成图像的行数和列数,声明一个新的Bitmap,  其中PixelFormat.Format24bppRgb设置了像素的类型为每个颜色为8位量化。具体的可以查看官方文档的说明。

3、声明一个BitmapData类,锁定内存地址。

4、将数据存储到内存中,其中BItmap DATa.Scan0指向开始的地址。

5、解锁内存区域

6、返回Bitmap即可。

代码如下:

private static Bitmap ToColorBitmap2(byte[] rawValues, int width, int height)
        {
            try
            {
                Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);
                BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb);    获取图像参数  
                int stride = bmpData.Stride;  // 扫描线的宽度    
                IntPtr iptr = bmpData.Scan0;  // 获取bmpData的内存起始位置  
                //int scanBytes = stride * height;// 用stride宽度,表示这是内存区域的大小   
                ///用Marshal的Copy方法,将刚才得到的内存字节数组复制到BitmapData中  
                System.Runtime.InteropServices.Marshal.Copy(rawValues, 0, iptr, rawValues.Length);
                bmp.UnlockBits(bmpData);  // 解锁内存区域 
                 算法到此结束,返回结果  
                return bmp;
            }
            catch (System.Exception e)
            {
                //Tools.m_CreateLogTxt("ToColorBitmap2", e.ToString(), Index);
                return null;
            }
        }

其实看到网上有很多教程是是同memoryStream的方式的,但是总是出现参数无效的报错。找了很久,找到了如上的方法(具体的链接找不到了,如果有看到的朋友,可以在评论里告诉我,我将更新在文章中)

二、灰度合成

只要时的R=G=B,使用上述的方法就可以得到灰度图像了。



  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值