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

📄 input.cpp

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

int InitStream(StrmType *strm, char *fileName)
{
	strm->fp = fopen(fileName, "wb");
	if (strm->fp == NULL)
		return -1; /*ERR_FILE_CANT_OPEN;*/
	fseek(strm->fp, 0, SEEK_SET);
	strm->buffer = 0;
	strm->ptr = 0;
	return 0;
}

int WriteDirect(StrmType *strm, BYTE *buffer, DWORD length)
{
	if (strm->ptr != 0)
		return -1; //ERR_STREAM_NOT_EMPTY
	fwrite(buffer, 1, length, strm->fp);
	return 0;
}

void WriteStream(StrmType *strm, DWORD code, BYTE length, int flag)
{
	int i, k, len = length;
	BYTE fillbyte = 0;
	while (len > 0)
	{
		while (strm->ptr == 32)
		{
  			for (i=3; i>=0; i--)
  			{
  				fwrite(((BYTE *)&(strm->buffer))+i, sizeof(BYTE), 1, strm->fp);
  				strm->ptr -= 8;
  				if (flag)
  				{
  					if (*(((BYTE *)&(strm->buffer))+i) == 0xff)
  						fwrite(&fillbyte, sizeof(BYTE), 1, strm->fp);
				}
			}
			strm->buffer = 0;
		}
		if (len <= 32-strm->ptr)
			k = len;
		else
			k = 32-strm->ptr;
		strm->buffer <<= k;
		strm->buffer |= (code>>(len-k))&((1<<k)-1);
		strm->ptr += k;
		len -= k;
	}
}

void FlushStream(StrmType *strm, int flag)
{
	int i;
	BYTE fillbyte = 0;
	while (strm->ptr%8 != 0)
		WriteStream(strm, 1, 1, 1);
	for (i=(strm->ptr)/8-1; i>=0; i--)
  	{
  		fwrite(((BYTE *)&(strm->buffer))+i, sizeof(BYTE), 1, strm->fp);
  		strm->ptr -= 8;
  		if (flag)
  		{
  			if (*(((BYTE *)&(strm->buffer))+i) == 0xff)
  				fwrite(&fillbyte, sizeof(BYTE), 1, strm->fp);
		}
	}
	strm->buffer = 0;
}

void FreeStream(StrmType *strm, int flag)
{
	if (strm->ptr > 0)
		FlushStream(strm, flag);
	fclose(strm->fp);
}


⌨️ 快捷键说明

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