⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bmp.cpp

📁 一个可用于多平台的旋转180度 jpg的源代码。大家可以进一步的改进。
💻 CPP
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "BMP.h"

//创建一个设备无关位图结构
void CreateDIB(DIB_Type *DIB, BMP_Header *image)
{
	WORD n;
	DIB->width = image->infoHeader.biWidth;
	DIB->height = image->infoHeader.biHeight;
	DIB->bitCount = image->infoHeader.biBitCount;
	
	n = DIB->width*DIB->bitCount;
	if (n%32 == 0)
		DIB->bpl = n/8;
	else
  		DIB->bpl = n/8+(4-(n/8)%4);
	if (DIB->bitCount <= 8)
		DIB->palCount = 1<<(DIB->bitCount);
	else
		DIB->palCount = 0;
		
	DIB->picSize = DIB->bpl*DIB->height;
	DIB->offSet = image->fileHeader.bfOffBits-14;	

 	DIB->lpbmi = (LPBITMAPINFO)malloc(40+sizeof(RGBQUAD)*DIB->palCount+DIB->picSize);
 	DIB->lpvbits = (BYTE *)DIB->lpbmi+DIB->offSet;

 	DIB->lpvbits = (BYTE *)DIB->lpbmi+DIB->offSet;
 	
 	memcpy(DIB->lpbmi, &image->infoHeader, 40);
 	if (DIB->palCount > 0)
 	{
 		fseek(image->fp, 14+40, SEEK_SET);
	 	fread((BYTE *)DIB->lpbmi+40, sizeof(RGBQUAD), DIB->palCount, image->fp);
	}
 	fseek(image->fp, 14+DIB->offSet, SEEK_SET);
 	fread(DIB->lpvbits, sizeof(BYTE), DIB->picSize, image->fp);
}

//删除位图结构
void DeleteDIB(DIB_Type *DIB)
{
	free(DIB->lpbmi);
	DIB->hDIB = NULL;
}

//读入BMP文件
int LoadBMPHeader(BMP_Header *image, char *fileName)
{
	image->fp = fopen(fileName, "rb");
	if (image->fp == NULL)
		return -1;//ERR_FILE_CANT_OPEN;
	fseek(image->fp, 0, SEEK_SET);
	fread(&(image->fileHeader), sizeof(BITMAPFILEHEADER), 1, image->fp);
	fread(&(image->infoHeader), sizeof(BITMAPINFOHEADER), 1, image->fp);
	if (strncmp((char *)&(image->fileHeader.bfType), "BM", 2) != 0)
	{
		fclose(image->fp);
		return -1;//ERR_FMT_NOT_BMP
	}
	if (image->infoHeader.biCompression)
	{
		fclose(image->fp);
		return -1;//ERR_FMT_COMPRESSION
	}
	return 0;
}

//关闭BMP文件
void CloseBMPHeader(BMP_Header *image)
{
	fclose(image->fp);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -