//一个使用CImage类将彩色jpeg图像转换成灰度图像的小程序

//本小程序使用VS2022编程环境,在C++空项目中使用CImage类将彩色jpeg图像转换成灰度图像

//相关代码及注释如下:
#include<iostream>
#include<atlimage.h> //处理图像类对象必须包含的头文件
#include<string.h>
using namespace std;
void ColorToGray(LPCTSTR srcFilePath, LPCTSTR destFilePath)
{
    CImage srcImage; //声明图像类对象
    srcImage.Load(srcFilePath); //将源图像载入
    int width = srcImage.GetWidth(); //获得源图像像素宽度值
    int height = srcImage.GetHeight();//获得源图像像素高度值
    int bpp = srcImage.GetBPP();
    int pitch = srcImage.GetPitch(); //每行字节数
    BYTE* pImage = (BYTE*)srcImage.GetBits();//获取图像起始位置指针,GetBits返回的是未定类型,强转一下
    cout << "源图像相关信息" << endl;
    cout << "图像宽度:" << width << "像素" << endl;
    cout << "图像高度:" << height << "像素" << endl;
    cout << "分 辨 率:" << width * height / 10000 << "万像素" << endl;
    cout << "位 深 度:" << bpp << endl;
    system("pause");
    for (int x = 0; x < width; x++) //双重循环遍历各像素点
    {
        for (int y = 0; y < height; y++)
        {
            BYTE r = *(pImage + pitch * y + x * bpp / 8 + 0);
            BYTE g = *(pImage + pitch * y + x * bpp / 8 + 1);
            BYTE b = *(pImage + pitch * y + x * bpp / 8 + 2);
            //这里指针移动不是通过pImage++自增移动,而是始终以首地址为基准,通过加每行字节(GetPitch)乘行数,
            //再加指定位置像素所在列位置(通过GetBPP/8+0/1/2得到,GetBPP得到的是位数值通过除8的到字节数),还
            //得加上r、g、b位置。因为像素每行末尾可能存在空字节,所以这种方法比使用pImage++的方法简单。
            BYTE gray = round(r * 0.299 + g * 0.587 + b * 0.114);
            //彩色图像转换成灰度图像的转换公式
            *(pImage + pitch * y + x * bpp / 8 + 0) = gray;
            *(pImage + pitch * y + x * bpp / 8 + 1) = gray;
            *(pImage + pitch * y + x * bpp / 8 + 2) = gray;
            //这里实际是伪转换,图像的大小没有改变,只是r、g、b三个字节都使用相同颜色值。
        }
    }
    srcImage.Save(destFilePath);
    //保存转换成灰度的图形
}


int main()
{
    LPCTSTR srcFilePath = _T("C:\\Users\\Administrator\\Desktop\\1111.jpg"); //源文件
    LPCTSTR destFilePath = _T("C:\\Users\\Administrator\\Desktop\\2222.jpg"); //目标文件
    ColorToGray(srcFilePath, destFilePath);
    return 0;
}

相关推荐

  1. python之彩色图像灰度图像

    2024-01-07 16:54:06       70 阅读
  2. 使用pdfboxpdf转换图片

    2024-01-07 16:54:06       32 阅读
  3. 【FPGA图像处理实战】- 彩色图像灰度

    2024-01-07 16:54:06       57 阅读
  4. cv2.cvtColor()二维转化彩色图像

    2024-01-07 16:54:06       43 阅读
  5. debian pdf 转换jpg图片

    2024-01-07 16:54:06       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-07 16:54:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-07 16:54:06       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-07 16:54:06       82 阅读
  4. Python语言-面向对象

    2024-01-07 16:54:06       91 阅读

热门阅读

  1. 【C++学习笔记】C++多值返回写法

    2024-01-07 16:54:06       52 阅读
  2. 回车事件怎样绑定?

    2024-01-07 16:54:06       54 阅读
  3. Adobe Photoshop 快捷键

    2024-01-07 16:54:06       40 阅读
  4. [密码学][ecc]secp256k1

    2024-01-07 16:54:06       64 阅读
  5. Spring MVC之HandlerAdapter

    2024-01-07 16:54:06       56 阅读
  6. 神经网络中的重要概念

    2024-01-07 16:54:06       50 阅读
  7. hyperf 十九 数据库 二 模型

    2024-01-07 16:54:06       53 阅读