不知道YCrCb数据和奇场,偶场的关系,搞了半天没搞出来。<br />下面是我写的程序,720*525,数据放在szBMPData里了。<br /> FILE *file;<br /> int i,j;<br /> double Y0,Y1,Cr,Cb;<br /> BYTE byWrite[6];<br /> double fWrite[6];<br /><br /> file = fopen(dlg.GetPathName(),"r+");<br /> nSeekPos = 54;<br /> byWrite[2] = 0;<br /> fseek(file,nSeekPos,SEEK_SET);<br /> for(i=0;i<525;i++)<br /> {<br /> for(j=0;j<360;j++)<br /> {<br /> //byWrite[0] = m_szBMPData[i*1440 + 1440 - j*2-1];<br /> //byWrite[1] = m_szBMPData[i*1440 + 1440 - j*2];<br /><br /> Y0 = m_szBMPData[i*1440 + 1440 - j*4];<br /> Y1 = m_szBMPData[i*1440 + 1440 - j*4-2];<br /> Cb = m_szBMPData[i*1440 + 1440 - j*4-1];<br /> Cr = m_szBMPData[i*1440 + 1440 - j*4-3];<br /><br /> /*Cr = m_szBMPData[i*1440 + 1440 - j*4];<br /> Cb = m_szBMPData[i*1440 + 1440 - j*4-2];<br /> Y0 = m_szBMPData[i*1440 + 1440 - j*4-1];<br /> Y1= m_szBMPData[i*1440 + 1440 - j*4-3];*/<br />/*<br />C = Y - 16;<br />D = U - 128;U (Cb)<br />E = V - 128;V (Cr)<br />R = clip( round( 1.164383 * C + 1.596027 * E ) )<br />G = clip( round( 1.164383 * C - (0.391762 * D) - (0.812968 * E) ) )<br />B = clip( round( 1.164383 * C + 2.017232 * D ) )<br />*/<br /> fWrite[2]=1.164383*(Y0-16)+1.596027*(Cr-128);//r<br /> fWrite[1]=1.164383*(Y0-16)-0.812968*(Cr-128)-0.391762*(Cb-128);//G<br /> fWrite[0]=1.164383*(Y0-16)+1.596027*(Cr-128);//B<br /><br /> fWrite[5]=1.164383*(Y1-16)+1.596027*(Cr-128);//r<br /> fWrite[4]=1.164383*(Y1-16)-0.812968*(Cr-128)-0.391762*(Cb-128);//G<br /> fWrite[3]=1.164383*(Y1-16)+1.596027*(Cr-128);//B<br /> for(int k=0;k<6;k++)<br /> {<br /> byWrite[k] = (BYTE)fWrite[k];<br /> }<br /> if(!feof(file))<br /> {<br /> fwrite(byWrite,6,1,file);<br /> }<br /> else<br /> {<br /> break;<br /> }<br /> }<br /> }<br /> fclose(file);<br /> |
|