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

📄 colorspace.cpp

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

//确保数值在0-255
inline BYTE BYTE_SCOPE(double val)
{
	int ival = (int)val;
	if (ival < 0)
		return 0;
	if (ival > 255)
		return 255;
	return (BYTE)ival;
}

//转换彩色空间,公式如下
//Y = 0.299*R + 0.587*G + 0.114*B (Lum)
//Cb = - 0.1687*R - 0.3313*G + 0.5*B + 128 (Chr Blue)
//Cr = 0.5*R - 0.4187*G - 0.0813*B + 128 (Chr Red)
int RGB2YCrCb(	BYTE Y[][MAX_WIDTH], BYTE Cr[][MAX_WIDTH/2], BYTE Cb[][MAX_WIDTH/2],BYTE R[][MAX_WIDTH], BYTE G[][MAX_WIDTH], BYTE B[][MAX_WIDTH],int width, int height )
{
	int i, j;
	int res;
	if (width%2!=0 || height%2!=0)
		return -1;	
	for (i=0; i<height; i++)
		for (j=0; j<width; j++)
  			Y[i][j] = BYTE_SCOPE(0.299*R[i][j] + 0.587*G[i][j] + 0.114*B[i][j]);
	for (i=0; i<height; i+=2)
		for (j=0; j<width; j+=2)
		{
   			Cr[i>>1][j>>1] = BYTE_SCOPE(0.5*R[i][j] - 0.4187*G[i][j] - 0.0813*B[i][j] + 128);
  			Cb[i>>1][j>>1] = BYTE_SCOPE(-0.1687*R[i][j] - 0.3313*G[i][j] + 0.5*B[i][j] + 128);
  		}
	return 0;
}

//部分采样
void AlignBitplane16x16( BYTE R[][MAX_WIDTH], BYTE G[][MAX_WIDTH], BYTE B[][MAX_WIDTH],int *wid, int *hei, int width, int height)
{
	int i, j;
	if (width%16==0 && height%16==0)
	{
		*wid = width;
		*hei = height;
		return;
	}
	if (width%16 == 0)
		*wid = width;
	else
		*wid = width+(16-width%16);
	if (height%16 == 0)
		*hei = height;
	else
		*hei = height+(16-height%16);
	for (i=0; i<height; i++)
		for (j=width; j<*wid; j++)
		{
			R[i][j] = R[i][width-1];
			G[i][j] = G[i][width-1];
			B[i][j] = B[i][width-1];
  		}
	for (j=0; j<*wid; j++)
		for (i=height; i<*hei; i++)
		{
			R[i][j] = R[height-1][j];
			G[i][j] = G[height-1][j];
			B[i][j] = B[height-1][j];
  		}
}

//获取RGB值
void Compact2Bitplane( 	BYTE R[][MAX_WIDTH], BYTE G[][MAX_WIDTH], BYTE B[][MAX_WIDTH],BYTE BGR[], int width, int height, int bpl )
{
	int i, j, t1, t2;
	for (i=0; i<height; i++)
	{
		t1 = height-i-1;
		for (j=0; j<width; j++)
		{
			t2 = i*bpl+j*3;
			R[t1][j] = BGR[t2+2];
			G[t1][j] = BGR[t2+1];
			B[t1][j] = BGR[t2];
 		}
	}
}




⌨️ 快捷键说明

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