📄 general.h
字号:
#include <math.h>
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
void cmap_1side(float &h, float &s, float &v, float xpnt)
{
float t;
if (xpnt > 0.8)
{
h = 330. + 30*(1.-xpnt)/0.2;
s = (1.-xpnt)/0.2;
v = 1.0;
}
else if (xpnt > 0.2)
{
t = 2.0*M_PI*((xpnt-0.2)/.6);
h = 240.0*(0.8-xpnt)/0.6 + 5.0*sin(t);
s = 1.0;
v = 1.0;
}
else
{
h = 270.0*(.2-xpnt)+240.0;
s = 1.0;
v = xpnt/0.2;
}
}
void cmap_2side(float &h, float &s, float &v, float xpnt)
{
if(xpnt > 0.8)
{
h = 30. - 30.*(xpnt-0.8)*(xpnt-0.8)/0.04;
s = (1.0-xpnt)/0.2;
v = 1.0;
}
else if (xpnt > .3)
{
h = (135.0 - 105.*(xpnt-.3)/.5);
s = 1.0;
v = 1.0;
}
else if (xpnt > 0.)
{
h = (180.0 - 45.*xpnt/.3);
s = 1.0;
v = xpnt/.3;
}
else if (xpnt > -.3)
{
h = (180. - 45.*xpnt/.3);
s = 1.0;
v = fabs(xpnt)/.3;
}
else
{
h = (225. - 135.*(xpnt+.3)/.7);
s = 1.0;
v = 1.0;
}
return;
}
#define GRAY_ZERO 0.3
void cmap_gray(float &h, float &s, float &v, float xpnt) {
h = 0;
s = 0;
v = (GRAY_ZERO+xpnt)/(1.0+GRAY_ZERO);
return;
}
#undef GRAY_ZERO
/* hsvrgb: convert and HSV specified color to an RGB color
*
* Copyright (C) 2003 John B. Schneider,
* original algorithm from Patrick J. Flynn
*
* input:
* 0 <= h <= 360 (hue)
* 0 <= v <= 1.0 (brightness)
* 0 <= s <= 1.0 (saturation)
*
* output: 0 <= ir,ig,ib <= 255
*/
void hsvrgb(float h, float s, float v, unsigned char &ir, unsigned char &ig, unsigned char &ib)
{
float pqvt[4], f;
int i, irpnt[6]={2,1,0,0,3,2},
igpnt[6]={3,2,2,1,0,0},
ibpnt[6]={0,0,3,2,2,1};
if (s == 0.0) {
ir = 255.0*v;
ig = ir;
ib = ir;
return;
}
if (h == 360.0) h=0.0;
h = h / 60.0;
i = floor(h);
f = h-i;
pqvt[2] = 255.0*v;
pqvt[0] = pqvt[2]*(1.0-s);
pqvt[1] = pqvt[2]*(1.0-s*f);
pqvt[3] = pqvt[2]*(1.0-s*(1.0-f));
ir = pqvt[irpnt[i]];
ig = pqvt[igpnt[i]];
ib = pqvt[ibpnt[i]];
return;
}
float **DefineArray(int DimensionX,int DimensionY)
{
float **p;
p=(float **)malloc(DimensionX*sizeof(float *));
for(int i=0;i<DimensionX;i++)
{
p[i]=(float *)malloc(DimensionY*sizeof(float));
memset(p[i],0,DimensionY*sizeof(float));
}
return p;
}
void FreeArray(float **p,int DimensionX)
{
for(int i=0;i<DimensionX;i++) free(p[i]);
free(p);
}
unsigned char **DefineIntArray(int DimensionX,int DimensionY)
{
unsigned char **p;
p=(unsigned char **)malloc(DimensionX*sizeof(unsigned char *));
for(int i=0;i<DimensionX;i++)
{
p[i]=(unsigned char *)malloc(DimensionY*sizeof(unsigned char));
memset(p[i],0,DimensionY*sizeof(unsigned char));
}
return p;
}
void FreeIntArray(unsigned char **p,int DimensionX)
{
for(int i=0;i<DimensionX;i++) free(p[i]);
free(p);
printf("sdfsaff\n");
}
LPBITMAPFILEHEADER bmfh=new BITMAPFILEHEADER;
BITMAPINFOHEADER m_lpBMPHdr;
LPRGBQUAD m_lpvColorTable=(LPRGBQUAD)new RGBQUAD[256];;
int sizeHdr;
DWORD m_dwImageSize;
DWORD dwBytes;
void WriteMyColor()
{
float h,s,v;
unsigned char ir,ig,ib;
float temp;
for(int i=0;i<256;i++)
{
temp=(2*i/255.0-1.0);//(255-i)/255.0;
cmap_2side(h,s,v,temp);
hsvrgb(h,s,v,ir,ig,ib);
m_lpvColorTable[i].rgbBlue=ib;
m_lpvColorTable[i].rgbGreen=ig;
m_lpvColorTable[i].rgbRed=ir;
m_lpvColorTable[i].rgbReserved=0;
}
return;
}
void init256BMP(unsigned long width, unsigned long height)
{
int nBitCounts=8;
int m_nColorEntries=256;
bmfh->bfType = 0x4d42; // 'BM'
bmfh->bfSize = 0;
bmfh->bfReserved1 = bmfh->bfReserved2 = 0;
bmfh->bfOffBits =
sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) +
sizeof(RGBQUAD) * m_nColorEntries;
// memset(&bmfh, 0, sizeof(BITMAPFILEHEADER));
sizeHdr = sizeof(BITMAPINFOHEADER) +
sizeof(RGBQUAD) * m_nColorEntries;
m_lpBMPHdr.biSize = sizeof(BITMAPINFOHEADER); //以下是为BITMAPINFOHEADER结构赋值
m_lpBMPHdr.biWidth = width;
m_lpBMPHdr.biHeight = height;
m_lpBMPHdr.biPlanes = 1;
m_lpBMPHdr.biBitCount = nBitCounts;
m_lpBMPHdr.biCompression = BI_RGB;
m_lpBMPHdr.biSizeImage = 0;
m_lpBMPHdr.biXPelsPerMeter = 0;
m_lpBMPHdr.biYPelsPerMeter = 0;
m_lpBMPHdr.biClrUsed = m_nColorEntries;
m_lpBMPHdr.biClrImportant = m_nColorEntries;
// LPVOID m_lpvColorTable;
// m_lpvColorTable =(LPBYTE) &m_lpBMPHdr + sizeof(BITMAPINFOHEADER);
// memset(m_lpvColorTable, 0, sizeof(RGBQUAD) * m_nColorEntries);
printf("%d\n",bmfh->bfType );
// RGBQUAD *lprgb=(RGBQUAD *)m_lpvColorTable;
WriteMyColor();//写入我的颜色表
printf("%dnf2\n",(LPBYTE)m_lpvColorTable+sizeof(RGBQUAD) * m_nColorEntries);
printf("%d\n",bmfh->bfType );
// m_lpvColorTable = NULL;
dwBytes = ((DWORD) m_lpBMPHdr.biWidth * m_lpBMPHdr.biBitCount) / 32;
if(((DWORD) m_lpBMPHdr.biWidth * m_lpBMPHdr.biBitCount) % 32)
{
dwBytes++;
}//实际长为dwBytes,原来的长为width
dwBytes *= 4;
m_lpBMPHdr.biSizeImage=dwBytes * m_lpBMPHdr.biHeight;
m_dwImageSize=m_lpBMPHdr.biSizeImage;//没被压缩
bmfh->bfSize=bmfh->bfOffBits+m_lpBMPHdr.biSizeImage;
}
float smr=1000.0;
BOOL New256BMPFile(char filename[],float **myArray,unsigned long width, unsigned long height)
{
LPBYTE m_lpDIBits=(LPBYTE)new unsigned char[m_dwImageSize];
memset(m_lpDIBits, 0, m_dwImageSize);
unsigned char* pp=m_lpDIBits;
for(unsigned long i=0;i<height;i++)
{
for(unsigned long j=0;j<width;j++)
{
*pp=(unsigned char)((smr+myArray[i][j])*255.0/(2*smr));
pp++;
}
for(j=width;j<dwBytes;j++)
{
*pp=0;pp++;
}
}
CFile* pFile;
pFile = new CFile;
pFile->Open(filename, CFile::modeCreate|CFile::modeWrite);
try { //注意区别
pFile->Write((LPVOID) bmfh, sizeof(BITMAPFILEHEADER));//结构体指针的地址
pFile->Write((LPVOID) &m_lpBMPHdr, sizeof(BITMAPINFOHEADER));//结构体的地址
pFile->Write((LPVOID) m_lpvColorTable, 256*sizeof(RGBQUAD));//数组的地址
pFile->Write((LPVOID) m_lpDIBits, m_dwImageSize);//结构体数组的地址呢?
}
catch(CException* pe) {
pe->Delete();
AfxMessageBox("write error");
return FALSE;
}
pFile->Close();
delete[] m_lpDIBits;
m_lpDIBits = NULL;
// m_lpvColorTable = NULL;
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -