Moin zusammen,
ich habe folgendes Problem.
Ich hab hier den Code:
Eine Funktion zum Allokieren:
Danach noch eine Funktion:
Mein Problem ist, dass in rNew[0] und in gNew[0] ein default value drin steht oder was auch immer das ist, habe keine Ahnung woher das kommt: 1078525952. Normalerweise müsste 0 drin stehen, funktioniert bei bNew[0] und auch bei allen anderen Werten einwandfrei...
Jemand eine Ahnung?
MfG Nadriel
EDIT: Hier noch der Code zum Main:
ich habe folgendes Problem.
Ich hab hier den Code:
Eine Funktion zum Allokieren:
Code:
int*alloc1DIntArray(const unsigned int count)
{
int*ptr;
ptr=(int*)malloc(count*sizeof(int));
if(ptr!=NULL)
return ptr;
return NULL;
}
Danach noch eine Funktion:
Code:
void prog(int*y,int*u,int*v,int size)
{
void prog(int*y,int*u,int*v,int size)
{
int*r=NULL,*g=NULL,*b=NULL,*rNew=NULL,*gNew=NULL,*bNew=NULL,*bit=NULL,
*dom=NULL,*pos=NULL,*varCheckPos=NULL;
float*verh,sum=0;
FILE*fp;
r=alloc1DIntArray(size);
g=alloc1DIntArray(size);
b=alloc1DIntArray(size);
rNew=alloc1DIntArray(3);
gNew=alloc1DIntArray(3);
bNew=alloc1DIntArray(3);
bit=alloc1DIntArray(64);
dom=alloc1DIntArray(3);
pos=alloc1DIntArray(3);
varCheckPos=alloc1DIntArray(3);
verh=alloc1DFloatArray(3);
int y2=0,u2=0,v2=0,z=0,y3=0,u3=0,v3=0,cDurchlauf=0;
double y4=0.000000,u4=0.000000,v4=0.000000;
for(int i=0;i<64;i++)
{
bit[i]=0;
}
for(int i=0;i<3;i++)
{
dom[i]=0;
pos[i]=0;
varCheckPos[i]=0;
verh[i]=0;
}
for(int i=0;i<size;i++)
{
v4 = v[i] * 1.000000;
y4 = y[i] * 1.000000;
u4 = u[i] * 1.000000;
y2=y4+(1.4075*(v4-128.000000));
y3=(int)y2;
r[i]=y3;
u2=y4-((0.3455*(u4-128.000000))-(0.7169*(v4-128.000000)));
u3=(int)u2;
g[i]=u3;
v2=y4+(1.7790*(u4-128.000000));
v3=(int)v2;
b[i]=v3;
z=((r[i]>>6)<<(4))|((g[i]>>6)<<(2))|(b[i]>>6);
//printf("Y:%d U:%d V:%d\nZ:%d\nR:%d G:%d B:%d\nyy:%d uu:%d vv:%d\nyyy:%lf uuu:%lf vvv:%lf\n--------------------\n",y[i],u[i],v[i],z,y2,u2,v2,y[i] * 1.0,u[i] * 1.0,v[i] * 1.0);
bit[z]++;
}
dom[0]=bit[0];
varCheckPos[0]++;
for(int i=0;i<64;i++)
{
if(bit[i]>dom[0])
{
dom[2]=dom[1];
dom[1]=dom[0];
dom[0]=bit[i];
varCheckPos[0]++;
varCheckPos[1]++;
varCheckPos[2]++;
}
else if(bit[i]>dom[1])
{
dom[1]=bit[i];
varCheckPos[1]++;
}
else if(bit[i]>dom[2])
{
dom[2]=bit[i];
varCheckPos[2]++;
}
for(int j=0;j<3;j++)
{
if(varCheckPos[j]>0)
{
pos[j]=i;
varCheckPos[j]=0;
}
}
}
fp=fopen("c:\\test.txt","w+");
for(int i=0;i<3;i++)
{
sum+=dom[i];
rNew[i]=((pos[i]>>(4))&0x03)<<6;
gNew[i]=((pos[i]>>(2))&0x03)<<6;
bNew[i]=(pos[i]&0x03)<<6;
}
for(int i=0;i<3;i++)
{
verh[i]=dom[i]/sum;
printf("%d\n",pos[i]);
fprintf(fp,"%d\t%d\t%d\t%d\t%d\n",dom[i],(verh[i]*100),rNew[i],gNew[i],bNew[i]);
}
fclose(fp);
free(r);
free(g);
free(b);
free(rNew);
free(gNew);
free(bNew);
free(bit);
free(dom);
free(pos);
free(varCheckPos);
free(verh);
}
Jemand eine Ahnung?
MfG Nadriel
EDIT: Hier noch der Code zum Main:
Code:
int main()
{
int*y=NULL;
y=alloc1DIntArray(640*480);
int*u=NULL;
u=alloc1DIntArray(640*480);
int*v=NULL;
v=alloc1DIntArray(640*480);
for(int i=0;i<(640*480);i++)
{
y[i] = 82;
u[i] = 90;
v[i] = 240;
}
prog(y,u,v,(640*480));
getchar();
free(y);
free(u);
free(v);
}
Zuletzt bearbeitet: