资源简介

自己修改读入图片路径

资源截图

代码片段和文件信息

#include “Windows.h“
#include 
#include 
//using namespace std;

// 动态申请二维内存(指针数组)的函数
template 
void NewArr(T**& Array int row int line)
{
        Array = new T*[row];
        for (int i = 0; i != row; i++)
        {
                Array[i] = new T[line];
                memset(Array[i] 0 sizeof(T) * line);
        }
}

// 动态释放二维内存的函数
template
void DeleteArray (T**& Array int line)
{
        for (int i = 0; i < line; i++)
        {
                delete[] Array[i];
                Array[i] = NULL;
        }
        delete[] Array;
        Array = NULL;
}


// 函数说明
// path 文件图片的绝对地址
// bf bi作为两个输出参数 函数内部完成初始化
// lpBit 图像数据 一个超级大的二维数组(一级指针数组) 可以丢一个空指针进去 函数内部代为申请内存
void ReadBitmap(const char* path BITMAPFILEHEADER& bf BITMAPINFOHEADER& bi unsigned char**& lpBit)
{
        FILE* fp = fopen(path “rb“);
        if (fp == NULL)
         {  printf(“没有找到需要转换的图片“); 
    exit(0);
         }     

        fread(&bf sizeof(BITMAPFILEHEADER) 1 fp); // 写入文件头
        fread(&bi sizeof(BITMAPINFOHEADER) 1 fp); // 写入信息头

        NewArr(lpBit bi.biHeight (bi.biWidth * 3 + 3) / 4 * 4);
        for (int i = 0; i < bi.biHeight; i++)
                for (int j = 0; j < (bi.biWidth * 3 + 3) / 4 * 4; j++)
                        fread(&lpBit[i][j] sizeof(unsigned char) 1 fp); // 每次读入一个字节

        fclose(fp);
}

// 函数说明
// path 文件图片的绝对地址
// bf bi作为两个输入参数
// lpBit 图像数据 经过ReadBitmap初始化后作为输入参数
void WriteBitmap(const char* path BITMAPFILEHEADER& bf BITMAPINFOHEADER& bi unsigned char**& lpBit BYTE limit)
{
        FILE* fp;
        fp = fopen(path “wb“);
        if (fp == NULL)
                exit(0);

        BITMAPFILEHEADER newbf; // 初始化文件头
        memcpy(&newbf &bf sizeof(BITMAPFILEHEADER));
        int newbfWidth = (bi.biWidth + 3) / 4 * 4; // 4字节补齐
        int newbfImageSize = newbfWidth * bi.biHeight; // 位图数据实际大小
        newbf.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHE

评论

共有 条评论