📄 infohidedoc.cpp
字号:
{
y=m_size.cy-y-1;
lpbits[(y*m_size.cy+x)*3+space]=val;
if(lpbits[(y*m_size.cy+x)*3+space]>255)lpbits[(y*m_size.cy+x)*3+space]=255;
if(lpbits[(y*m_size.cy+x)*3+space]<0)lpbits[(y*m_size.cy+x)*3+space]=0;
}
void CInfoHideDoc::WTSINV(float *C, int m, int N)
{
int NK,i,k,iter,LK;
double PI;
PI=3.14159;
NK=4;
k=0;
LK=1;
for(iter=0;iter<m;iter++)
{
for(i=0;i<LK;i++)
{
C[k]=(float)(1.0/(float)cos((PI*(4*i+1))/NK));
k++;
}
NK<<=1;
LK<<=1;
}
for(i=1;i<(N-1);i++)
C[i]/=2.0;
}
void CInfoHideDoc::IFCT(float *x, unsigned int *L, float *C, int m, int N)
{
int NK1,NK2,i,j,k,kk,ip,incr,L1,iter;
float T;
x[0]=x[0]*(float)sqrt(N);
for(i=1;i<N;i++)
x[i]=(float)(x[i]*(float)sqrt(N)/1.4140);
NK1=1;
NK2=2;
kk=1;
for(i=0;i<m;i++)
kk*=2;
for(iter=1;iter<m;iter++)
{
kk>>=1;
L1=kk-1;
for(k=L1;k>=1;k--)
for(i=0;i<NK1;i++)
x[NK1+k*NK2+i]=x[NK1+k*NK2+i]+x[NK1+(k-1)*NK2+i];
NK1<<=1;
NK2<<=1;
}
NK1=N>>1;
for(i=1;i<NK1;i++)
x[i]*=2.0;
for(i=0;i<(N-1);i++)
{
if(i<(int)L[i])
continue;
else
{
T=x[i];
x[i]=x[L[i]];
x[L[i]]=T;
}
}
ip=1;
kk=0;
incr=2;
for(iter=0;iter<m;iter++)
{
for(k=0;k<ip;k++)
{
for(j=k;j<N;j+=incr)
{
i=j+ip;
T=x[j];
x[i]=x[i]*C[kk];
x[j]=T+x[i];
x[i]=T-x[i];
}
kk++;
}
ip<<=1;
incr<<=1;
}
kk=1;
for(i=1;i<(N>>1);i++)
{
T=x[N-1];
k=1;
for(j=kk;j<N;j++)
{
x[N-k]=x[N-k-1];
k++;
}
x[kk]=T;
kk+=2;
}
for(i=0;i<N;i++)
x[i]=x[i]/(float)(N);
}
/***************************************************************
*ProcessName:最低有效位(LSB)加密程序
***************************************************************/
void CInfoHideDoc::OnLsbE()
{
// TODO: Add your command handler code here
TypeChoice tc_pdlg;
if(tc_pdlg.DoModal()==IDOK)
{
if(tc_pdlg.m_wenzi)
{
INPUT_MW mw_pdlg;
if(mw_pdlg.DoModal()==IDOK)
{
BYTE len=mw_pdlg.m_miwen.GetLength();
BYTE *cchar;
cchar=new BYTE[len*8];
int i;
for(i=0;i<len;i++)
{
cchar[8*i]=mw_pdlg.m_miwen[i]%2;
cchar[8*i+1]=(mw_pdlg.m_miwen[i]>>1)%2;
cchar[8*i+2]=(mw_pdlg.m_miwen[i]>>2)%2;
cchar[8*i+3]=(mw_pdlg.m_miwen[i]>>3)%2;
cchar[8*i+4]=(mw_pdlg.m_miwen[i]>>4)%2;
cchar[8*i+5]=(mw_pdlg.m_miwen[i]>>5)%2;
cchar[8*i+6]=(mw_pdlg.m_miwen[i]>>6)%2;
cchar[8*i+7]=(mw_pdlg.m_miwen[i]>>7)%2;
}
lpbits[(m_size.cx*m_size.cy-1)*3]=(lpbits[(m_size.cx*m_size.cy-1)*3]>>1<<1)+len%2;
lpbits[(m_size.cx*m_size.cy-2)*3]=(lpbits[(m_size.cx*m_size.cy-2)*3]>>1<<1)+(len>>1)%2;
lpbits[(m_size.cx*m_size.cy-3)*3]=(lpbits[(m_size.cx*m_size.cy-3)*3]>>1<<1)+(len>>2)%2;
lpbits[(m_size.cx*m_size.cy-4)*3]=(lpbits[(m_size.cx*m_size.cy-4)*3]>>1<<1)+(len>>3)%2;
lpbits[(m_size.cx*m_size.cy-5)*3]=(lpbits[(m_size.cx*m_size.cy-5)*3]>>1<<1)+(len>>4)%2;
lpbits[(m_size.cx*m_size.cy-6)*3]=(lpbits[(m_size.cx*m_size.cy-6)*3]>>1<<1)+(len>>5)%2;
lpbits[(m_size.cx*m_size.cy-7)*3]=(lpbits[(m_size.cx*m_size.cy-7)*3]>>1<<1)+(len>>6)%2;
lpbits[(m_size.cx*m_size.cy-8)*3]=(lpbits[(m_size.cx*m_size.cy-8)*3]>>1<<1)+(len>>7)%2;
len=len*8;
i=0;
while(1){
lpbits[i*3]=(lpbits[i*3]>>1<<1)+cchar[i];
i=i+1;
if(i==len)break;
}
free(cchar);
}
UpdateAllViews(NULL);
SetModifiedFlag();
}
if(tc_pdlg.m_tuxiang)
{
JM_PIC jp_pdlg;
if(jp_pdlg.DoModal()==IDOK)
{
CFile fp;//指定的位图文件
fp.Open(jp_pdlg.m_picinfo,CFile::modeRead);
fp.Read((LPSTR)&mm_bmh,sizeof(BITMAPFILEHEADER));
if(mm_bmh.bfType!=0x4D42)//判断文件是否为位图
{
AfxMessageBox("不是合法的文件!");
fp.Close();
return;
}
DWORD dwBitsSize=mm_bmh.bfSize;
mm_lpbmi=(BITMAPINFO*)GlobalAllocPtr(GHND,dwBitsSize-sizeof(BITMAPFILEHEADER));
fp.Read(mm_lpbmi,dwBitsSize-sizeof(BITMAPFILEHEADER));
if((mm_lpbmi->bmiHeader.biBitCount!=24)||(mm_lpbmi->bmiHeader.biCompression!=BI_RGB))
{//判断该位图是否为24位非压缩位图
AfxMessageBox("该位图不是我们需要的24位位图!");
GlobalFreePtr(mm_lpbmi);
mm_lpbmi=NULL;
fp.Close();
return;
}
mm_lpbits=(LPBYTE)mm_lpbmi+sizeof(BITMAPINFOHEADER);
mm_m_size.cx=mm_lpbmi->bmiHeader.biWidth;//得到位图宽度
mm_m_size.cy=mm_lpbmi->bmiHeader.biHeight;//得到位图高度
fp.Close();//关闭文件
int b_times;//求得载体图像与秘密图像的比例
b_times=m_size.cx/mm_m_size.cx;
for(int i=0;i<mm_m_size.cy;i++)
for(int j=0;j<mm_m_size.cx;j++)
{
lpbits[((i*mm_m_size.cx+j)*8)*3]=(lpbits[((i*mm_m_size.cx+j)*8)*3]>>1<<1)
+mm_lpbits[(i*mm_m_size.cx+j)*3]%2;
lpbits[((i*mm_m_size.cx+j)*8+1)*3]=(lpbits[((i*mm_m_size.cx+j)*8+1)*3]>>1<<1)
+(mm_lpbits[(i*mm_m_size.cx+j)*3]>>1)%2;
lpbits[((i*mm_m_size.cx+j)*8+2)*3]=(lpbits[((i*mm_m_size.cx+j)*8+2)*3]>>1<<1)
+(mm_lpbits[(i*mm_m_size.cx+j)*3]>>2)%2;
lpbits[((i*mm_m_size.cx+j)*8+3)*3]=(lpbits[((i*mm_m_size.cx+j)*8+3)*3]>>1<<1)
+(mm_lpbits[(i*mm_m_size.cx+j)*3]>>3)%2;
lpbits[((i*mm_m_size.cx+j)*8+4)*3]=(lpbits[((i*mm_m_size.cx+j)*8+4)*3]>>1<<1)
+(mm_lpbits[(i*mm_m_size.cx+j)*3]>>4)%2;
lpbits[((i*mm_m_size.cx+j)*8+5)*3]=(lpbits[((i*mm_m_size.cx+j)*8+5)*3]>>1<<1)
+(mm_lpbits[(i*mm_m_size.cx+j)*3]>>5)%2;
lpbits[((i*mm_m_size.cx+j)*8+6)*3]=(lpbits[((i*mm_m_size.cx+j)*8+6)*3]>>1<<1)
+(mm_lpbits[(i*mm_m_size.cx+j)*3]>>6)%2;
lpbits[((i*mm_m_size.cx+j)*8+7)*3]=(lpbits[((i*mm_m_size.cx+j)*8+7)*3]>>1<<1)
+(mm_lpbits[(i*mm_m_size.cx+j)*3]>>7)%2;
lpbits[((i*mm_m_size.cx+j)*8)*3+1]=(lpbits[((i*mm_m_size.cx+j)*8)*3+1]>>1<<1)
+mm_lpbits[(i*mm_m_size.cx+j)*3+1]%2;
lpbits[((i*mm_m_size.cx+j)*8+1)*3+1]=(lpbits[((i*mm_m_size.cx+j)*8+1)*3+1]>>1<<1)
+(mm_lpbits[(i*mm_m_size.cx+j)*3+1]>>1)%2;
lpbits[((i*mm_m_size.cx+j)*8+2)*3+1]=(lpbits[((i*mm_m_size.cx+j)*8+2)*3+1]>>1<<1)
+(mm_lpbits[(i*mm_m_size.cx+j)*3+1]>>2)%2;
lpbits[((i*mm_m_size.cx+j)*8+3)*3+1]=(lpbits[((i*mm_m_size.cx+j)*8+3)*3+1]>>1<<1)
+(mm_lpbits[(i*mm_m_size.cx+j)*3+1]>>3)%2;
lpbits[((i*mm_m_size.cx+j)*8+4)*3+1]=(lpbits[((i*mm_m_size.cx+j)*8+4)*3+1]>>1<<1)
+(mm_lpbits[(i*mm_m_size.cx+j)*3+1]>>4)%2;
lpbits[((i*mm_m_size.cx+j)*8+5)*3+1]=(lpbits[((i*mm_m_size.cx+j)*8+5)*3+1]>>1<<1)
+(mm_lpbits[(i*mm_m_size.cx+j)*3+1]>>5)%2;
lpbits[((i*mm_m_size.cx+j)*8+6)*3+1]=(lpbits[((i*mm_m_size.cx+j)*8+6)*3+1]>>1<<1)
+(mm_lpbits[(i*mm_m_size.cx+j)*3+1]>>6)%2;
lpbits[((i*mm_m_size.cx+j)*8+7)*3+1]=(lpbits[((i*mm_m_size.cx+j)*8+7)*3+1]>>1<<1)
+(mm_lpbits[(i*mm_m_size.cx+j)*3+1]>>7)%2;
lpbits[((i*mm_m_size.cx+j)*8)*3+2]=(lpbits[((i*mm_m_size.cx+j)*8)*3+2]>>1<<1)
+mm_lpbits[(i*mm_m_size.cx+j)*3+2]%2;
lpbits[((i*mm_m_size.cx+j)*8+1)*3+2]=(lpbits[((i*mm_m_size.cx+j)*8+1)*3+2]>>1<<1)
+(mm_lpbits[(i*mm_m_size.cx+j)*3+2]>>1)%2;
lpbits[((i*mm_m_size.cx+j)*8+2)*3+2]=(lpbits[((i*mm_m_size.cx+j)*8+2)*3+2]>>1<<1)
+(mm_lpbits[(i*mm_m_size.cx+j)*3+2]>>2)%2;
lpbits[((i*mm_m_size.cx+j)*8+3)*3+2]=(lpbits[((i*mm_m_size.cx+j)*8+3)*3+2]>>1<<1)
+(mm_lpbits[(i*mm_m_size.cx+j)*3+2]>>3)%2;
lpbits[((i*mm_m_size.cx+j)*8+4)*3+2]=(lpbits[((i*mm_m_size.cx+j)*8+4)*3+2]>>1<<1)
+(mm_lpbits[(i*mm_m_size.cx+j)*3+2]>>4)%2;
lpbits[((i*mm_m_size.cx+j)*8+5)*3+2]=(lpbits[((i*mm_m_size.cx+j)*8+5)*3+2]>>1<<1)
+(mm_lpbits[(i*mm_m_size.cx+j)*3+2]>>5)%2;
lpbits[((i*mm_m_size.cx+j)*8+6)*3+2]=(lpbits[((i*mm_m_size.cx+j)*8+6)*3+2]>>1<<1)
+(mm_lpbits[(i*mm_m_size.cx+j)*3+2]>>6)%2;
lpbits[((i*mm_m_size.cx+j)*8+7)*3+2]=(lpbits[((i*mm_m_size.cx+j)*8+7)*3+2]>>1<<1)
+(mm_lpbits[(i*mm_m_size.cx+j)*3+2]>>7)%2;
}
lpbits[(m_size.cx*m_size.cy-1)*3]=(lpbits[(m_size.cx*m_size.cy-1)*3]>>1<<1)+mm_m_size.cx%2;
lpbits[(m_size.cx*m_size.cy-2)*3]=(lpbits[(m_size.cx*m_size.cy-2)*3]>>1<<1)+(mm_m_size.cx>>1)%2;
lpbits[(m_size.cx*m_size.cy-3)*3]=(lpbits[(m_size.cx*m_size.cy-3)*3]>>1<<1)+(mm_m_size.cx>>2)%2;
lpbits[(m_size.cx*m_size.cy-4)*3]=(lpbits[(m_size.cx*m_size.cy-4)*3]>>1<<1)+(mm_m_size.cx>>3)%2;
lpbits[(m_size.cx*m_size.cy-5)*3]=(lpbits[(m_size.cx*m_size.cy-5)*3]>>1<<1)+(mm_m_size.cx>>4)%2;
lpbits[(m_size.cx*m_size.cy-6)*3]=(lpbits[(m_size.cx*m_size.cy-6)*3]>>1<<1)+(mm_m_size.cx>>5)%2;
lpbits[(m_size.cx*m_size.cy-7)*3]=(lpbits[(m_size.cx*m_size.cy-7)*3]>>1<<1)+(mm_m_size.cx>>6)%2;
lpbits[(m_size.cx*m_size.cy-8)*3]=(lpbits[(m_size.cx*m_size.cy-8)*3]>>1<<1)+(mm_m_size.cx>>7)%2;
}
UpdateAllViews(NULL);
SetModifiedFlag();
}
//声音隐藏算法暂时没做,可继续完成,原理相同
/*
if(tc_pdlg.m_shengyin)
{
}
*/
}
UpdateAllViews(NULL);
SetModifiedFlag();
}
/***************************************************************
*ProcessName:最低有效位(LSB)解密程序
***************************************************************/
void CInfoHideDoc::OnLsbD()
{
// TODO: Add your command handler code here
TypeChoice tc_pdlg;
if(tc_pdlg.DoModal()==IDOK)
{
if(tc_pdlg.m_wenzi)
{
int len;
len=lpbits[(m_size.cx*m_size.cy-1)*3]%2+(lpbits[(m_size.cx*m_size.cy-2)*3]%2)*2
+(lpbits[(m_size.cx*m_size.cy-3)*3]%2)*4+(lpbits[(m_size.cx*m_size.cy-4)*3]%2)*8
+(lpbits[(m_size.cx*m_size.cy-5)*3]%2)*16+(lpbits[(m_size.cx*m_size.cy-6)*3]%2)*32
+(lpbits[(m_size.cx*m_size.cy-7)*3]%2)*64+(lpbits[(m_size.cx*m_size.cy-8)*3]%2)*128;
char *cchar;
cchar=new char[len];
cchar[len]='\0';
for(int i=0;i<len*8;i=i+8)
{
cchar[i/8]=lpbits[i*3]%2+(lpbits[(i+1)*3]%2)*2
+(lpbits[(i+2)*3]%2)*4+(lpbits[(i+3)*3]%2)*8
+(lpbits[(i+4)*3]%2)*16+(lpbits[(i+5)*3]%2)*32
+(lpbits[(i+6)*3]%2)*64+(lpbits[(i+7)*3]%2)*128;
}
CString chprint=cchar;
AfxMessageBox(chprint);
}
if(tc_pdlg.m_tuxiang)
{
int len;
len=lpbits[(m_size.cx*m_size.cy-1)*3]%2+(lpbits[(m_size.cx*m_size.cy-2)*3]%2)*2
+(lpbits[(m_size.cx*m_size.cy-3)*3]%2)*4+(lpbits[(m_size.cx*m_size.cy-4)*3]%2)*8
+(lpbits[(m_size.cx*m_size.cy-5)*3]%2)*16+(lpbits[(m_size.cx*m_size.cy-6)*3]%2)*32
+(lpbits[(m_size.cx*m_size.cy-7)*3]%2)*64+(lpbits[(m_size.cx*m_size.cy-8)*3]%2)*128;
mm_lpbits=new unsigned char[len*len*3];
for(int i=0;i<len;i++)
for(int j=0;j<len;j++)
{
mm_lpbits[(i*len+j)*3]=(lpbits[((i*len+j)*8)*3]%2)+(lpbits[((i*len+j)*8+1)*3]%2)*2
+(lpbits[((i*len+j)*8+2)*3]%2)*4+(lpbits[((i*len+j)*8+3)*3]%2)*8
+(lpbits[((i*len+j)*8+4)*3]%2)*16+(lpbits[((i*len+j)*8+5)*3]%2)*32
+(lpbits[((i*len+j)*8+6)*3]%2)*64+(lpbits[((i*len+j)*8+7)*3]%2)*128;
mm_lpbits[(i*len+j)*3+1]=(lpbits[((i*len+j)*8)*3+1]%2)+(lpbits[((i*len+j)*8+1)*3+1]%2)*2
+(lpbits[((i*len+j)*8+2)*3+1]%2)*4+(lpbits[((i*len+j)*8+3)*3+1]%2)*8
+(lpbits[((i*len+j)*8+4)*3+1]%2)*16+(lpbits[((i*len+j)*8+5)*3+1]%2)*32
+(lpbits[((i*len+j)*8+6)*3+1]%2)*64+(lpbits[((i*len+j)*8+7)*3+1]%2)*128;
mm_lpbits[(i*len+j)*3+2]=(lpbits[((i*len+j)*8)*3+2]%2)+(lpbits[((i*len+j)*8+1)*3+2]%2)*2
+(lpbits[((i*len+j)*8+2)*3+2]%2)*4+(lpbits[((i*len+j)*8+3)*3+2]%2)*8
+(lpbits[((i*len+j)*8+4)*3+2]%2)*16+(lpbits[((i*len+j)*8+5)*3+2]%2)*32
+(lpbits[((i*len+j)*8+6)*3+2]%2)*64+(lpbits[((i*len+j)*8+7)*3+2]%2)*128;
}
for(i=0;i<len*len*3;i++)lpbits[i]=mm_lpbits[i];
mm_m_size.cx=len;
mm_m_size.cy=len;
mm_lpbmi->bmiHeader.biWidth=len;
mm_lpbmi->bmiHeader.biHeight=len;
mm_lpbmi->bmiHeader.biSizeImage=len*len*3;
mm_bmh.bfSize=len*len*3+54;
trans=1;
UpdateAllViews(NULL);
SetModifiedFlag();
}
//声音隐藏算法暂时没做,可继续完成,原理相同
/*
if(tc_pdlg.m_shengyin)
{
}
*/
}
}
/***************************************************************
*ProcessName:BMP格式转换为JPEG格式程序
***************************************************************/
void CInfoHideDoc::OnBmp2jpeg()
{
// TODO: Add your command handler code here
BMPTOJPEG2K b2j_pdlg;
b2j_pdlg.DoModal();
}
void CInfoHideDoc::OnRgbtogray()
{
// TODO: Add your command handler code here
BYTE *buffer;
buffer=new BYTE[m_size.cx*m_size.cy];
int i,j;
for(i=0;i<m_size.cy;i++)
for(j=0;j<m_size.cx;j++)
{
buffer[i*m_size.cx+j]=(BYTE)(lpbits[(i*m_size.cx+j)*3]*0.3+
lpbits[(i*m_size.cx+j)*3+1]*0.59+lpbits[(i*m_size.cx+j)*3+2]*0.11);
}
for(i=0;i<m_size.cy;i++)
for(j=0;j<m_size.cx;j++)
{
lpbits[1024+i*m_size.cx+j]=buffer[i*m_size.cx+j];
}
lpbits=lpbits+1024;
bmh.bfSize=m_size.cx*m_size.cy+1078;
bmh.bfOffBits=1078;
lpbmi->bmiHeader.biBitCount=8;
lpbmi->bmiHeader.biSizeImage=m_size.cx*m_size.cy;
for(i=0;i<256;i++)
{
lpbmi->bmiColors[i].rgbRed =(BYTE)i;
lpbmi->bmiColors[i].rgbGreen =(BYTE)i;
lpbmi->bmiColors[i].rgbBlue =(BYTE)i;
lpbmi->bmiColors[i].rgbReserved=(BYTE)i;
}
free(buffer);
buffer=NULL;
UpdateAllViews(NULL);
SetModifiedFlag();
}
void CInfoHideDoc::OnRgbto2()
{
// TODO: Add your command handler code here
BYTE *buffer;
buffer=new BYTE[m_size.cx*m_size.cy];
int i,j;
for(i=0;i<m_size.cy;i++)
for(j=0;j<m_size.cx;j++)
{
if((lpbits[(i*m_size.cx+j)*3]*0.3+
lpbits[(i*m_size.cx+j)*3+1]*0.59+lpbits[(i*m_size.cx+j)*3+2]*0.11)>127)
buffer[i*m_size.cx+j]=1;
else buffer[i*m_size.cx+j]=0;
}
for(i=0;i<m_size.cy;i++)
for(j=0;j<m_size.cx;j=j+8)
{
lpbits[8+(i*m_size.cx+j)/8]=(buffer[i*m_size.cx+j]<<7)+(buffer[i*m_size.cx+j+1]<<6)
+(buffer[i*m_size.cx+j+2]<<5)+(buffer[i*m_size.cx+j+3]<<4)
+(buffer[i*m_size.cx+j+4]<<3)+(buffer[i*m_size.cx+j+5]<<2)
+(buffer[i*m_size.cx+j+6]<<1)+(buffer[i*m_size.cx+j+7]);
}
lpbits=lpbits+8;
bmh.bfSize=m_size.cx*m_size.cy/8+62;
bmh.bfOffBits=62;
lpbmi->bmiHeader.biBitCount=1;
lpbmi->bmiHeader.biSizeImage=m_size.cx*m_size.cy/8;
lpbmi->bmiColors[0].rgbRed =(BYTE)0;
lpbmi->bmiColors[0].rgbGreen =(BYTE)0;
lpbmi->bmiColors[0].rgbBlue =(BYTE)0;
lpbmi->bmiColors[0].rgbReserved=(BYTE)0;
lpbmi->bmiColors[1].rgbRed =(BYTE)255;
lpbmi->bmiColors[1].rgbGreen =(BYTE)255;
lpbmi->bmiColors[1].rgbBlue =(BYTE)255;
lpbmi->bmiColors[1].rgbReserved=(BYTE)255;
free(buffer);
buffer=NULL;
UpdateAllViews(NULL);
SetModifiedFlag();
}
unsigned char BayerPattern[8][8]={0,32, 8,40, 2,34,10,42,
48,16,56,24,50,18,58,26,
12,44, 4,36,14,46, 6,38,
60,28,52,20,62,30,54,22,
3,35,11,43, 1,33, 9,41,
51,19,59,27,49,17,57,25,
15,47, 7,39,13,45, 5,37,
63,31,55,23,61,29,53,21};
#define ISPAL_PATTERN_SIZE 64 /* 离散数据最大尺寸 */
#define ISPAL_BEGIN 64 /* 调色板分量起始量 */
#define ISPAL_END 224 /* 调色板分量最高值 */
#define ISPAL_STEP 32 /* 调色板分量间隔 */
void CInfoHideDoc::OnRgbto256()
{
// TODO: Add your command handler code here
int i,j;
BYTE *buffer;
buffer=new BYTE[m_size.cx*m_size.cy];
unsigned long *pal_buffer;
pal_buffer=new unsigned long[256];
Creat256Palette(pal_buffer);
for(i=0;i<m_size.cy;i++)
for(j=0;j<m_size.cx;j++)
{
buffer[i*m_size.cx+j]=(BYTE)(CnvTo256PalIndex(j,i,lpbits[(i*m_size.cx+j)*3+2],
lpbits[(i*m_size.cx+j)*3+1],lpbits[(i*m_size.cx+j)*3]));
}
for(i=0;i<m_size.cy;i++)
for(j=0;j<m_size.cx;j++)
{
lpbits[1024+i*m_size.cx+j]=buffer[i*m_size.cx+j];
}
lpbits=lpbits+1024;
bmh.bfSize=m_size.cx*m_size.cy+1078;
bmh.bfOffBits=1078;
lpbmi->bmiHeader.biBitCount=8;
lpbmi->bmiHeader.biSizeImage=m_size.cx*m_size.cy;
for(i=0;i<256;i++)
{
lpbmi->bmiColors[i].rgbRed =(BYTE)((pal_buffer[i]>>16)%256);
lpbmi->bmiColors[i].rgbGreen =(BYTE)((pal_buffer[i]>>8)%256);
lpbmi->bmiColors[i].rgbBlue =(BYTE)(pal_buffer[i]%256);
lpbmi->bmiColors[i].rgbReserved=(BYTE)i;
}
free(buffer);
buffer=NULL;
UpdateAllViews(NULL);
SetModifiedFlag();
}
int CInfoHideDoc::Creat256Palette(unsigned long *pal)
{
unsigned long r, g, b;
int cnt = 0;
/* 标准调色板 */
for (r=ISPAL_BEGIN; r<256; r+=ISPAL_STEP)
{
for (g=ISPAL_BEGIN; g<256; g+=ISPAL_STEP)
{
for (b=ISPAL_BEGIN; b<256; b+=ISPAL_STEP)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -