|
Can you tell us how do you declare this 2D array? I will give you a hint for static 2D array in C++.
int array[100][100];
int count[100];
for(int i=0 ; i<100 ; ++i)
{
count[i] = 0;
}
for(int i=0 ; i<100 ; ++i)
{
for(int j=0 ; j<100 ; ++j)
{
if(array[i][j] == 255)
{
count[j]++;
}
}
}
Hope this helps.
-Saurabh
|
|
|
|
|
thanks for your help, my data is from binary image, different binary image has different dimension, when i load one 2-D binary image, depend on image size, but i can obtain width and height of image via access image definition. do you understand me? i can declare a 2-D dinamic array.thanks
unsigned char *ucImgdata1 =m_vicImg.ibuff;
int iWidth1 = m_vicImg.endx-m_vicImg.stx+1;
int iHeight1 = m_vicImg.endy-m_vicImg.sty+1;
int iWidthbyte1=m_vicImg.buffwidth;
int *nColumnCounts=new int[iWidth1];
for (int i=0;i<iwidth1;iwidth1;i++)
{
nColumnCounts[i]=0;
}
for(int iY=0;iY<iheight;iheight1;iy++)
{
for(int iX=0;iX<iwidth1;iwidth1;ix++)
{
if (imgArray [iX+iY*iwidth1] == 255)
{
nColumnCounts[iX]++;
FILE* stream;
stream=fopen("C:\\TestArray.txt","w");
fprintf(stream," Array=%d\n",nColumnCounts[iX]);
fclose(stream);
}
}
but i couldn't get the correct result. i would like to get one array including how many amount of 255 for each column.help me,thanks.
gentleguy
modified on Sunday, June 29, 2008 4:53 AM
|
|
|
|
|
thanks a lot, i still get the correct result. but my data format is a little different.
the detail is following:
unsigned char *ucImgdata1 =m_vicImg.ibuff;
int iWidth1 = m_vicImg.endx-m_vicImg.stx+1;
int iHeight1 = m_vicImg.endy-m_vicImg.sty+1;
int iWidthbyte1=m_vicImg.buffwidth;
int *nColumnCounts=new int[iWidth1];
for (int i=0;i<iwidth1;i++)
{ nColumnCounts[i]=0;
}
for(int iY=0;iY<iheight1;iy++)
{
for(int iX=0;iX<iwidth1;ix++)
{
if (imgArray [iX+iY*iWidth1] == 255)
{
nColumnCounts[iX]++;
FILE* stream;
stream=fopen("C:\\TestArray.txt","w");
fprintf(stream," Array=%d\n",nColumnCounts[iX]);
fclose(stream);
}
}
}
could help me? thanks
gentleguy
|
|
|
|
|
As has been said, just get on and count them.
Is this data coming in from a text file? Then you can use CStdioFile to read it in one line at a time, and sscanf to process the rows - and maintain a count of number-of-255-s for each column.
Is it in a 2 dimensional array already? Then use a loop, and count whether a number ==s 255 or not.
If you have absolutely no idea, and this is homework (which I suspect, and is why I'm being unhelpful), then you will learn a lot more working with your fellow students and teacher than getting us to do the work.
What is it you are struggling with?
Iain.
Plz sir... CPallini CPallini abuz drugz, plz plz help urgent.
|
|
|
|
|
thanks for your reply,actually i load one image which is binary image, actually the data is 2_D array. this is about my work...not homework, i am doing projection histogram, so i need to collect each column 255 amound. i am not good in c++..learning...so if possible, pls help me. thanks a lot
gentleguy
|
|
|
|
|
So, you have a block of bytes, and you know it is W wide, and H high.
First - images often have the width padded by 4. Check whether this is the case or not.
void Count255s (BYTE *blob, UINT W, UINT H)
{
UINT nColumnCounts [W];
UINT x,y;
for (x = 0; x < W; x++) nColumnCounts [x] = 0;
for (y = 0; y < H; y++)
{
for (x = 0; x < W; x++)
{
if (blob [x + y*W] == 255)
nColumnCounts [x] += 1;
}
}
DoSomethingwithCounts (W, nColumnCounts);
}
There's no error checking, and there are more efficient ways of doing this, but this should be fairly clear for you, I hope.
You could replace the check with:
if (*blob++ == 255)
to remove the expensive multiplication, but I'd avoid that unless you are very happy with pointers.
Did that help at all?
Iain.
Plz sir... CPallini CPallini abuz drugz, plz plz help urgent.
|
|
|
|
|
thanks a lot. very helpful, how can i save each column amount? thanks, sorry ask many
by the way, why you use the third for loop? don't understnad.could you give me any explanation. thanks a lot
gentleguy
modified on Thursday, June 26, 2008 7:50 AM
|
|
|
|
|
1st for loop is to zero out all the counts. I put the action bit on the same line as the loops, which might have been a bad idea...
2nd and 3rd loops are going through the x,y coords of your data. If you were just looking for the grand total of 255s, you could have done it in one. But as you need to keep track of which column you're on, you need a 2D loop pair.
As for saving the column amount - however you like. If you just take my code and use it, you're in trouble. It's there to help you write your own. The answer to your question depends on your application, and how you put data into your histogram.
You could create a CArray, and pass a pointer or reference to it to the count function, then the results would be available outside the function.
Or you could have a CHistogram::InitialiseFromBitmapData function, and keep the results internally.
Or... lots more choices.
Iain.
Plz sir... CPallini CPallini abuz drugz, plz plz help urgent.
|
|
|
|
|
thanks a lot. here i will explain to you something, when i calculate 255 for each column, i just can start to scan my data(2-D) from left bottom, and then up row by row,do you understand me? thanks a lot, and disturb you a lot.
gentleguy
|
|
|
|
|
gentleguy wrote: do you understand me?
Not really...
The code I showed assumed that the data was row after row - I didn't assume whether I was starting with top left or bottom left - I've seen bitmap formats of both kind.
If your data is stored differently, you can change the maths inside the [ and ] to look it up differently.
Good luck,
Iain.
Plz sir... CPallini CPallini abuz drugz, plz plz help urgent.
|
|
|
|
|
|
i am not sure for this. i tried many times, still couldn't finish it. do you have any other idea, thanks
gentleguy
|
|
|
|
|
Hi all..
I am storing some mails in XML Format...Now i want to Sort them and store in XML File by MailDate wise...
My mail dates are
///////////////////////////////
CString mailDate;
////////////////////////////
I am getting date in this format..
20080430 8:36:05
20080423 13:49:19
20080402 14:56:50
20080402 14:21:11........
How i Can Compare and Sort them...
plz give me some idea
Thanking you
manju
Hi..
I am Mnaju.I have Completed my B.E Computers Science.Lokking for a job.I am interested in VC++
manju
|
|
|
|
|
I offered you a suggestion previously on this issue. What happened to that? Why is a date stored as a string in your program? If you have it as a COleDateTime object, you could use the COleDateTime Relational Operators[^].
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
Codeproject.com: Visual C++ MVP
|
|
|
|
|
Actually We are reading from the mails and storing as a "CHAR" in Structure..
<br />
typedef struct {<br />
<br />
LONG iMBUserMailBoxSize;<br />
LONG iMBUserMailCount;<br />
LONG iMBUserMailSize;<br />
LONG iMBUserMailAttachFileCount;<br />
BOOL bMBUserMailHasAttachment; <br />
TCHAR cMBUserMailPath[MAX_PATH_LEN];<br />
TCHAR cMBUserMailFrom[MAX_PATH_LEN];<br />
TCHAR cMBUserMailFromEmail[MAX_PATH_LEN];<br />
TCHAR cMBUserMailFromName[MAX_PATH_LEN];<br />
TCHAR cMBUserMailBcc[MAX_PATH_LEN];<br />
TCHAR cMBUserMailCc[MAX_PATH_LEN];<br />
TCHAR cMBUserMailDate[MAX_DATE_LEN]; <br />
TCHAR cMBUserMailSubject[MAX_PATH_LEN];<br />
TCHAR cMBUserMailTextDesc[MAX_MAIL_SIZE];<br />
ACL_STRUCT_MBUSERS_MAIL_ATTCH ACL_ATTACH[MAX_ATTACH_COUNT];<br />
<br />
} ACL_STRUCT_MBUSERS_MAIL;
First we get a MailDate it is in "TCHAR"......
After that we changed it to CString to Remove "/" operator....thats it..
manju
Hi..
I am Mnaju.I have Completed my B.E Computers Science.Lokking for a job.I am interested in VC++
manju
|
|
|
|
|
manju#123 wrote: Actually We are reading from the mails and storing as a "CHAR" in Structure..
Don't store it as a char, store it as a COleDateTime. That's all I have to offer.
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
Codeproject.com: Visual C++ MVP
|
|
|
|
|
Rajesh R Subramanian wrote: store it as a COleDateTime.
Ok i will change it COleDateTime...
Thank you
manju
Hi..
I am Mnaju.I have Completed my B.E Computers Science.Lokking for a job.I am interested in VC++
manju
|
|
|
|
|
Rajesh R Subramanian wrote: store it as a COleDateTime.
Ok i will change it as COleDateTime...
Thank you for your suggestion
manju
Hi..
I am Mnaju.I have Completed my B.E Computers Science.Lokking for a job.I am interested in VC++
manju
|
|
|
|
|
One more thing..
If MailDate is in CString...We can Sort it or not..
thank you
manju
Hi..
I am Mnaju.I have Completed my B.E Computers Science.Lokking for a job.I am interested in VC++
manju
|
|
|
|
|
manju#123 wrote: If MailDate is in CString...We can Sort it or not..
If you have it as a COleDateTime object, the job would be easier for you as the relational operators are defined for that class. Doing it with a CString will be known as a "Coding horror".
Nobody can give you wiser advice than yourself. - Cicero
.·´¯`·->Rajesh<-·´¯`·.
Codeproject.com: Visual C++ MVP
|
|
|
|
|
Thank you.
I will change Char to COleDateTime and Check it...
manju
Hi..
I am Mnaju.I have Completed my B.E Computers Science.Lokking for a job.I am interested in VC++
manju
|
|
|
|
|
i am displying the integers in edit box by using SetDlgItemInt the output is overwritten but i want to display it in multiple lines like a sequence....plz n e budy help me out!!!!
|
|
|
|
|
Not sure which of your questions to reply to... This one, or the one from one minute earlier... I'll assume it was some sort of error.
There is a edit box style to allow it to have multiple lines, but that would require you to get the text, add a carriage return and the new number, then set the text. Very inefficient.
Instead, I would recommend a list box, with the sort style turned off. Then you can just add a new string / number to the end, and let windows do the hard work.
eg:
void CMyDlg::AddNumberToListBox (int nValue)
{
CListBox *lb = (CListBox *)GetDlgItem (IDC_MYLISTBOX);
CString s;
s.Format ("%i", nValue);
int nSel = lb->AddString (s);
if (nSel != LB_ERR)
lb->SetCurSel (nSel);
}
Good luck,
Iain.
Plz sir... CPallini CPallini abuz drugz, plz plz help urgent.
|
|
|
|
|
i am displying the integers in edit box by using SetDlgItemInt the output is overwritten but i want to display it in multiple lines like a sequence....plz n e budy help me out!!!!
|
|
|
|
|
I guess you didn't check the multiline property of the edit box to true in properties. Also set the "want return" property to true if you want that on pressing enter key the caret should move to the next line,
Also do remember, every time you set a new value to the edit box you need to take the existing values, append new value to it and then display it.
BTW why don't you use a LISTBOX
Somethings seem HARD to do, until we know how to do them.
_AnShUmAn_
|
|
|
|