BMP与PPM格式的转换
/*真彩色bmp格式与PPM-P6之间的转换*/#include<math.h>
#include <iomanip>
#include <stdlib.h>
#include <windows.h>
#include <stdio.h>typedef struct BGR
{unsigned char b;unsigned char g;unsigned char r;
}BGR;typedef struct RGB
{unsigned char r;unsigned char g;unsigned char b;
}RGB;//bpp : BMP图像的色深,即一个像素用多少位表示,常见有1、4、8、16、24和32,分别对应单色、16色、256色、16位高彩色、24位真彩色和32位增强型真彩色
void PPMtoBMP(char *pFramePPM,int bpp)
{FILE* pPPM;fopen_s(&pPPM, pFramePPM, "rb");int width, height;char header[20];fgets(header, 20, pPPM);// get "P6" fgets(header, 20, pPPM);// get "width height" sscanf_s(header, "%d %d\n", &width, &height);fgets(header, 20, pPPM);// get "255" FILE *fp;fopen_s(&fp, "test.bmp", "wb");if (fp == NULL){printf("file is null.\n");return;}BITMAPFILEHEADER bmpheader;BITMAPINFOHEADER bmpinfo;RGB *ppmBitsRGB = (RGB *)malloc(width*height * sizeof(RGB));bmpheader.bfType = 0x4d42;bmpheader.bfReserved1 = 0;bmpheader.bfReserved2 = 0;bmpheader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) - 2;bmpheader.bfSize = bmpheader.bfOffBits + width * height*bpp / 8;bmpinfo.biSize = sizeof(BITMAPINFOHEADER);bmpinfo.biWidth = width;bmpinfo.biHeight = height;bmpinfo.biPlanes = 1;bmpinfo.biBitCount = bpp;bmpinfo.biCompression = 0;//BI_RGB;bmpinfo.biSizeImage = width* height*bpp / 8;bmpinfo.biXPelsPerMeter = 100;bmpinfo.biYPelsPerMeter = 100;bmpinfo.biClrUsed = 0;bmpinfo.biClrImportant = 0;fwrite(&bmpheader.bfType, sizeof(bmpheader.bfType), 1, fp);fwrite(&bmpheader.bfSize, sizeof(bmpheader.bfSize), 1, fp);fwrite(&bmpheader.bfReserved1, sizeof(bmpheader.bfReserved1), 1, fp);fwrite(&bmpheader.bfReserved2, sizeof(bmpheader.bfReserved2), 1, fp);fwrite(&bmpheader.bfOffBits, sizeof(bmpheader.bfOffBits), 1, fp);fwrite(&bmpinfo.biSize, sizeof(bmpinfo.biSize), 1, fp);fwrite(&bmpinfo.biWidth, sizeof(bmpinfo.biWidth), 1, fp);fwrite(&bmpinfo.biHeight, sizeof(bmpinfo.biHeight), 1, fp);fwrite(&bmpinfo.biPlanes, sizeof(bmpinfo.biPlanes), 1, fp);fwrite(&bmpinfo.biBitCount, sizeof(bmpinfo.biBitCount), 1, fp);fwrite(&bmpinfo.biCompression, sizeof(bmpinfo.biCompression), 1, fp);fwrite(&bmpinfo.biSizeImage, sizeof(bmpinfo.biSizeImage), 1, fp);fwrite(&bmpinfo.biXPelsPerMeter, sizeof(bmpinfo.biXPelsPerMeter), 1, fp);fwrite(&bmpinfo.biYPelsPerMeter, sizeof(bmpinfo.biYPelsPerMeter), 1, fp);fwrite(&bmpinfo.biClrUsed, sizeof(bmpinfo.biClrUsed), 1, fp);fwrite(&bmpinfo.biClrImportant, sizeof(bmpinfo.biClrImportant), 1, fp);int y,x;for (y = 0; y < height; y++){fread(&ppmBitsRGB[y*width], 3 * width, 1, pPPM);for (x = width - 1; x >= 0; x--){fwrite(&ppmBitsRGB[y*width + x].b, 1, 1, fp);fwrite(&ppmBitsRGB[y*width + x].g, 1, 1, fp);fwrite(&ppmBitsRGB[y*width + x].r, 1, 1, fp);}}fclose(fp);fp = NULL;return;
}void BMPtoPPM(char *pFrameRGB)
{FILE* pBMP;fopen_s(&pBMP, pFrameRGB, "rb");BITMAPINFOHEADER infoHeader;BITMAPFILEHEADER fileHeader;FILE *pFile;fopen_s(&pFile, "test.ppm", "wb");if (pFile == NULL){printf("file is null.\n");return;}fread(&fileHeader, sizeof(BITMAPFILEHEADER), 1, pBMP);fread(&infoHeader, sizeof(BITMAPINFOHEADER), 1, pBMP);if (infoHeader.biBitCount != 24){printf("it is not a 24-bit rgb image.\n");return;}long width = infoHeader.biWidth;long height = infoHeader.biHeight;// Write headerfprintf(pFile, "P6\n%d %d\n255\n", width, height);// Write pixel dataint i, j;BGR *bmpBitsBGR = (BGR *)malloc(width*height * sizeof(BGR));//获取每一个像素点的BGR值fseek(pBMP, fileHeader.bfOffBits, 0);for (i = 0; i <height; i++){fread(&bmpBitsBGR[i*width], 3 * width, 1, pBMP);for (j = width - 1; j >= 0; j--){fwrite(&bmpBitsBGR[i*width + j].r, 1, 1, pFile);fwrite(&bmpBitsBGR[i*width + j].g, 1, 1, pFile);fwrite(&bmpBitsBGR[i*width + j].b, 1, 1, pFile);}fseek(pBMP, (4 - (width % 4)) % 4, SEEK_CUR); //4字节对齐}// Close filefclose(pBMP);fclose(pFile);free(bmpBitsBGR);bmpBitsBGR = NULL;return;
}void main(){char readPath[] = "test.ppm";PPMtoBMP(readPath,24); return;
}
BMP与PPM格式的转换相关推荐
- python修改文件格式为jpg_python将.ppm格式图片转换成.jpg格式文件的方法
python将.ppm格式图片转换成.jpg格式文件的方法 将.ppm格式的图片转换成.jpg格式的图像,除了通过软件转换,还可以使用python脚本直接转换,so easy!!! from PIL ...
- 数字图像处理-bmp与jpeg格式互相转换
原理 JPEG图像的存储压缩结构 参考链接:https://www.zhihu.com/question/22116845/answer/22998727 来源:知乎 JPEG文件的格式是分为一个一个 ...
- linux ppm转jpg_python将.ppm格式图片转换成.jpg格式文件的方法
{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...
- 将ppm格式转换为bmp格式的方式有哪些?
学习需要,要将PPM格式的图片转换为bmp格式,试了两种方法: 1.使用Photoshop 2019逐张转换,另存为你需要的格式. 2.使用代码进行转换,这里我使用matlab工具进行转换 参考博客 ...
- 转换图片保持画质_图片格式怎么相互转换,如何转换jpg、 bmp、png格式
图片的格式有很多种,常见的就是jpg.bmp.png格式,这些格式本质上是没有多大的区别,都是安卓和电脑可以直接打开查看的,但是有时候还是会用到一些固定的格式,比如上传个人信息身份的时候,那这个时候如 ...
- 如何批量将 bmp 格式图片转换转换为 jpg
概要:png 和 jpg 这两种格式的图片相信大家都非常熟悉,但是 bmp 格式的图片可能大家接触得并没有那么多,bmp 是 Windows 操作系统中的标准图像文件格式,能够被多种 Windows ...
- bmp格式如何转换成jpg?可批量转换
bmp对于很多小伙伴们来说可能比较陌生,因为接触使用的比较少,但它也是Windows操作系统中的标准图像文件格式,小编在百度里经常下载到,由于这种图片格式不进行压缩,所以比较占用内存空间,并且很多网站 ...
- bmp格式怎么转换?教你三步快速转图片格式
图片已经是我们生活和工作中随处可见的了,大家平时也都会将自己手中的图片上传到网络平台上.但是大部分的网络平台上传的图片都要求是JPG格式的,而我们手中的图片刚好是bmp格式的无法上传使用,遇到这种情况 ...
- html怎么转换bmp,BMP是什么格式 怎么把BMP转成JPG格式的方法
首先来说说BMP是什么格式 BMP全称Bitmap,是Window操作系统中的标准图像文件格式,可以分成两类:设备相关位图(DDB)和设备无关位图(DIB),使用非常广.它采用位映射存储格式,除了图像 ...
最新文章
- 多线程共享内存的问题
- python访问数据库如何解决高并发_使用 Python 和 Oracle 数据库实现高并发性
- 压力真的会害死你,我也轻度抑郁过
- C++ Templates之模板元编程
- 马里兰大学calce电池循环测试数据集_Keras-建立RNN(循环神经网络)
- SQLite 被曝存在漏洞,数千应用受影响
- 收购小蓝单车部分资产、与ofo蜜月期结束,滴滴重构共享单车布局
- 高德经纬度转普通GPS经纬度
- Zabbix错误:zbx_mem_malloc(): out of memory的解决方法
- VSCode 之 设置 settings.json 配置文件
- java 数据类型cher,java期末考试题96534-(20008)
- unittest---unittest生成测试报告
- 华为 虚拟机 fusion服务器,华为FusionCompute虚拟机挂载点磁盘空间在线扩容
- 「优知学院」淘宝架构的前世今生(下)
- 【邢不行|量化小讲堂系列19-Python量化入门】平均趋向指标(ADX)策略在A股的实证
- 做一个理想现实主义者而不是幻想世俗主义者
- FutureCompletableFuture
- Oracle甲骨文8.7亿美元高价收购Eloqua
- ensp华为路由器ARP与ICMP的抓包
- utf—8在苹果手机上乱码_【研究】解决iPhone中文邮件乱码的四种方法