1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
|
BOOL CImage::AjoutMarqueBB(CImage& marque, char strmarq[], int m_hauteur,int m_largeur){
if(!m_hDib)
return FALSE; // DIB non valide
if(!marque.m_hDib)
return FALSE; // DIB non valide
LPBITMAPINFOHEADER BmSrcInfo=(LPBITMAPINFOHEADER)GlobalLock(m_hDib);
LPBITMAPINFO biSrc=(LPBITMAPINFO)BmSrcInfo;
LPBITMAPINFOHEADER BmDestInfo=(LPBITMAPINFOHEADER)GlobalLock(marque.m_hDib);
LPBITMAPINFO biDest=(LPBITMAPINFO)BmDestInfo;
// Détermination du nombre de couleurs
int nColors = BmSrcInfo->biClrUsed ? BmSrcInfo->biClrUsed : 0x1FF & (1 << BmSrcInfo->biBitCount);
// Détermination de la zone des bits de l'image source et largeur lignes en octets
BYTE* lpSrcBits = (BYTE*)BmSrcInfo+BmSrcInfo->biSize+nColors*sizeof(RGBQUAD);
int nScanWidth = WIDTHBYTES(BmSrcInfo->biWidth * BmSrcInfo->biBitCount);
// Détermination de la zone des bits de l'image destination
BYTE* lpDestBits = (BYTE*)BmDestInfo+BmDestInfo->biSize+nColors*sizeof(RGBQUAD);
// Traitement différent selon nombre de bits/pixel
// int L=Lenght( strmarq);
for (int L=0;strmarq[L]; L++)
return L;
int Cmp=0,x=0,y=0;
for (int i=1;i<L+1;i++)
{
while(Cmp<i*m_hauteur*m_largeur)
{
while(x< BmSrcInfo->biWidth)
{
while( y<BmSrcInfo->biHeight)
{
if (strmarq[i-1]==1)
{
if(lpDestBits[y*nScanWidth+x] == 255 && lpSrcBits[y*nScanWidth+x] != 255)
lpSrcBits[y*nScanWidth+x]++;
if(lpDestBits[y*nScanWidth+x]==0 && lpSrcBits[y*nScanWidth+x]!=0)
lpSrcBits[y*nScanWidth+x]--;
}
if (strmarq[i-1]==0)
{
if(lpDestBits[y*nScanWidth+x] == 0 && lpSrcBits[y*nScanWidth+x] != 0)
lpSrcBits[y*nScanWidth+x]++;
if(lpDestBits[y*nScanWidth+x]==255 && lpSrcBits[y*nScanWidth+x]!=255)
lpSrcBits[y*nScanWidth+x]--;
}
Cmp++;
}
y++;
}
if (y==BmSrcInfo->biHeight) y=0;
x++;
}
// return Cmp;
}
GlobalUnlock(m_hDib);
GlobalUnlock(marque.m_hDib);
return TRUE;
}
// et l'appelle:
void CTatoSpacBlocMDlg::OnMarquer(){
// TODO: Add your control notification handler code here
//??? A faire
// CString strmarq = "1110011";
char strmarq[]="1110011";
// m_Image.AjoutMarqueB(m_Marque,strmarq );
int m_hauteur=32;
int m_largeur=32;
m_Image.AjoutMarqueBB(m_Marque,strmarq ,m_hauteur,m_largeur);
// nom image cible = nomde la marque _ nom de l'image d'origine
int indice;
indice = m_Marque.m_Name.ReverseFind('\\');
CString str1,str2,str3;
str1 = m_Marque.m_Name.Right(m_Marque.m_Name.GetLength()-indice-1);
str1 = str1.Left(str1.ReverseFind('.'));
str2 = m_Marque.m_Name.Left(indice);
str2 = str2.Left(str2.ReverseFind('\\')+1);
str3.Format("%sCibles\\%s",str2,str1);
indice = m_Image.m_Name.ReverseFind('\\');
str1 = m_Image.m_Name.Right(m_Image.m_Name.GetLength()-indice-1);
str2.Format("%s_%s_%s",str3,strmarq,str1);
m_Image.SaveFile(str2);
OnOK();
} |
Partager