bonjour
j'ai fait un programme sur matlab pour tester une algorithme
mais quand je le reprogramme en vc++, j'ai rencontré quelques pb
par exemple,matlab considére l'image comme une matrice
par contre en vc++ n'est plus le cas

par exemple je veux convertir ce code matlab en vc+++
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
 
 RGBuint8 = imread('CLOWN.BMP');  % lecture de l'image bmp couleur
 matrice = double(RGBuint8);   %conversion des coefficients au format double
 qualite=10;
% en vc++ c pas le cas , càd j'ouvre l'image suivant une chemin
%recuperation des dimensions de la matrice (hauteur, largeur)
dim = size(matrice(:,:,1));
 
%on suppose que les images ont des dimensions qui sont des multiples de 8       
%nombre de matrice 8x8 dans la largeur de l'image
nb_mat8_larg = dim(1)/8;
%nombre de matrice 8x8 dans la hauteur de l'image
nb_mat8_haut = dim(2)/8;
 
%fabrication de la matrice 8x8 de quantification
M_Q = mat_quant(qualite);
 
for k=1:3
    for i=0:(nb_mat8_larg-1)
	    for j=0:(nb_mat8_haut-1)
		  %matrice 8x8 temporaire sur laquelle on va faire la DCT
		  M88 = matrice((1+8*i):(8*(i+1)),(1+8*j):(8*(j+1)),k);
end;
end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
function[res]=ajoute(m,valeur)
%fonction qui permet d'ajouter ou de retrancher une certaine valeur à tous
%les coefficients d'une matrice
%parametres d'entree
%   -m la matrice sur laquelle va porter le calcul
%   -valeur la valeur a ajouter (ou retrancher si nombre negatif)
%parametres de sortie
%   -res la matrice du resultat
 
 
%recuperation de la taille de la matrice
taille = size(m);
 
%construction d'une matrice que l'on va ajouter à m
temp = ones(taille(1),taille(2)) * valeur;
 
res = m + temp;
par conte en vc++ j'ecris:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
 
OOL CImage::Compression(int qualite)
{
	 if(!m_hDib)
		return FALSE;	// DIB non valide
	 if(!m_hDib)
		return FALSE;	// DIB non valide
 
	LPBITMAPINFOHEADER BmSrcInfo=(LPBITMAPINFOHEADER)GlobalLock(m_hDib);
	LPBITMAPINFO biSrc=(LPBITMAPINFO)BmSrcInfo;
 
 
	// Détermination du nombre de couleurs
	int nColors = BmSrcInfo->biClrUsed ? BmSrcInfo->biClrUsed : 0x1FF & (1 << BmSrcInfo->biBitCount);
 
//	on suppose que les images ont des dimensions qui sont des multiples de 8       
	//nombre de matrice 8x8 dans la largeur de l'image
		nb_mat8_larg = BmInfo->biHeight/8;
	//nombre de matrice 8x8 dans la hauteur de l'image
		nb_mat8_haut = BmInfo->biWidth/8
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
// Ramène la largeur du bitmap
int CImage::GetWidth() const
{
	int nRet=NULL;
 
	if(m_hDib)
	{
		LPBITMAPINFOHEADER BmInfo=(LPBITMAPINFOHEADER)GlobalLock(m_hDib);
		nRet=BmInfo->biWidth;
		GlobalUnlock(m_hDib);
	}
	return nRet;
}
 
// Ramène la hauteur du bitmap
int CImage::GetHeight() const
{
	int nRet=NULL;
 
	if(m_hDib)
	{
		LPBITMAPINFOHEADER BmInfo=(LPBITMAPINFOHEADER)GlobalLock(m_hDib);
		nRet=BmInfo->biHeight;
		GlobalUnlock(m_hDib);
	}
	return nRet;
}
 
voila j'ai pas arriver à completer le code en vc++
cmment je convertis la boucle pour  disingner que 3 signifie chaque couleur (vert, bleu, rouge)
 
est quelqu'un peut me completer le code:cry: :cry: