•
•
•
•
What is DaniWeb IT Discussion Community?
You're currently browsing the C++ section within the Software Development category of DaniWeb, a massive community of 456,584 software developers, web developers, Internet marketers, and tech gurus who are all enthusiastic about making contacts, networking, and learning from each other. In fact, there are 3,630 IT professionals currently interacting right now! Registration is free, only takes a minute and lets you enjoy all of the interactive features of the site.
Please support our C++ advertiser: Programming Forums
Views: 426 | Replies: 3
![]() |
•
•
Join Date: Sep 2006
Location: Michigan State University, United States
Posts: 232
Reputation:
Rep Power: 3
Solved Threads: 1
Alright, I'm developing a program that is going to take in .pbm image files, manipulate them, and output them in .ppm (P3) format.
That's all fine and good; I've got that down.
However, I'm looking for suggestions on good and efficient ways to figure out if 2 points ( row , col ) are connected in an object within an object. By object I mean a region of all one colour, that has no diagonal connectivity. If I figure this out fast enough, I will implement a diagonal-connectivity checker as well.
Any suggestions? I was thinking about using an STL stack to store my moves, in case I end up at a dead end, so I can go back a few moves and take another possible road. something like this (but I don't think this is efficient enough for me.), conceptually.
push all possible moves in order W , S , E , N - impossible moves are moves that go outside the region.
These will be something like a struct I'll call move, like this:
pop off the last possibility and go that way.
repeat.
if I run out of possibilities for moves (a dead end) pop and set my position to the next in the first alternative possibility and go forth.
However, it seems to me that if I were to go that way, with the specific order of directions to take, it would be horribly inefficient.
Any ideas? I'll be much obliged. I just wanna bounce ideas.
That's all fine and good; I've got that down.
However, I'm looking for suggestions on good and efficient ways to figure out if 2 points ( row , col ) are connected in an object within an object. By object I mean a region of all one colour, that has no diagonal connectivity. If I figure this out fast enough, I will implement a diagonal-connectivity checker as well.
Any suggestions? I was thinking about using an STL stack to store my moves, in case I end up at a dead end, so I can go back a few moves and take another possible road. something like this (but I don't think this is efficient enough for me.), conceptually.
push all possible moves in order W , S , E , N - impossible moves are moves that go outside the region.
These will be something like a struct I'll call move, like this:
struct point
{
int row;
int col;
};
struct move
{
point here;
point next;
};repeat.
if I run out of possibilities for moves (a dead end) pop and set my position to the next in the first alternative possibility and go forth.
However, it seems to me that if I were to go that way, with the specific order of directions to take, it would be horribly inefficient.
Any ideas? I'll be much obliged. I just wanna bounce ideas.
Damn the man! Save the Empire!
•
•
Join Date: Oct 2007
Location: Cherry Hill, NJ
Posts: 1,878
Reputation:
Rep Power: 13
Solved Threads: 193
I'm not sure exactly what you are trying to do.
What exactly do you mean by "moves"? By "object" do you mean a raster color run (a horizontal line of the same color)?
What is the purpose of doing this? The ppm format is as horribly inefficient as pbm, the only real difference is that it stores RGB colors instead of on/off. It has no compression or organization other than a simple list of pixels in raster order.
If you can explain it better with pictures, I don't mind.
What exactly do you mean by "moves"? By "object" do you mean a raster color run (a horizontal line of the same color)?
What is the purpose of doing this? The ppm format is as horribly inefficient as pbm, the only real difference is that it stores RGB colors instead of on/off. It has no compression or organization other than a simple list of pixels in raster order.
If you can explain it better with pictures, I don't mind.
•
•
Join Date: Sep 2006
Location: Michigan State University, United States
Posts: 232
Reputation:
Rep Power: 3
Solved Threads: 1
The reason I'm using these formats is that they're a good place to start off. I'll eventually make this program able to handle many types of pictures, but I've got to start somewhere ^_^
Alright, time for some ascii-art goodness.
I'll start with a small binary picture. [ ][X] for off/on
10x5
0 1 2 3 4 5 6 7 8 9
0[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
1[ ][X][ ][ ][ ][ ][X][X][X][ ]
2[ ][X][X][ ][ ][ ][X][ ][X][ ]
3[ ][X][X][X][ ][ ][X][X][X][ ]
4[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
Alright. there's the picture. Now I'm looking for the best (efficiency) algorithm in c++ to test if the pixels (1,1) and (7,1) are connected.
As of now, the program attempts to go N, if that doesn't work it goes E, if that doesn't work it goes S, and if that doesn't work it goes west. It does this until it can no longer go anywhere.
I would like it to go in an order that changes depending on what direction the destination is from the starting point, but that ends up being inefficient in other ways. any ideas are good, thanks.
Or, should I start by checking how many borders I cross between the start and end, going directly at each other? in this case, I would pass 2 boundaries, meaning either the region wraps like a U to the destination or there are two regions involved.
What do you think?
[edit] apparently it doesn't like my ascii-art. You get the idea, though. it's a triangle seperated from a square with a hole in it.
Alright, time for some ascii-art goodness.
I'll start with a small binary picture. [ ][X] for off/on
10x5
0 1 2 3 4 5 6 7 8 9
0[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
1[ ][X][ ][ ][ ][ ][X][X][X][ ]
2[ ][X][X][ ][ ][ ][X][ ][X][ ]
3[ ][X][X][X][ ][ ][X][X][X][ ]
4[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
Alright. there's the picture. Now I'm looking for the best (efficiency) algorithm in c++ to test if the pixels (1,1) and (7,1) are connected.
As of now, the program attempts to go N, if that doesn't work it goes E, if that doesn't work it goes S, and if that doesn't work it goes west. It does this until it can no longer go anywhere.
I would like it to go in an order that changes depending on what direction the destination is from the starting point, but that ends up being inefficient in other ways. any ideas are good, thanks.
Or, should I start by checking how many borders I cross between the start and end, going directly at each other? in this case, I would pass 2 boundaries, meaning either the region wraps like a U to the destination or there are two regions involved.
What do you think?
[edit] apparently it doesn't like my ascii-art. You get the idea, though. it's a triangle seperated from a square with a hole in it.
Last edited by FireSBurnsmuP : Nov 7th, 2007 at 12:52 am.
Damn the man! Save the Empire!
•
•
Join Date: Oct 2007
Location: Cherry Hill, NJ
Posts: 1,878
Reputation:
Rep Power: 13
Solved Threads: 193
Ah, I get it. Google "flood fill algorithms".
To get ASCII art to look right just put it in [code] tags:
Good luck.
To get ASCII art to look right just put it in [code] tags:
10x5 0 1 2 3 4 5 6 7 8 9 0[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ] 1[ ][X][ ][ ][ ][ ][X][X][X][ ] 2[ ][X][X][ ][ ][ ][X][ ][X][ ] 3[ ][X][X][X][ ][ ][X][X][X][ ] 4[ ][ ][ ][ ][ ][ ][ ][ ][ ][ ]
Good luck.
Last edited by Duoas : Nov 7th, 2007 at 3:57 am.
![]() |
•
•
•
•
•
•
•
•
DaniWeb C++ Marketplace
•
•
•
•
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
Similar Threads
- How to create image maps that look so nice... (Graphics and Multimedia)
- Square Image Thumbnail (PHP)
- paging problem (ASP)
- Image Swap Problems (JavaScript / DHTML / AJAX)
- Loading image to HTML (JavaScript / DHTML / AJAX)
- Image functions in php (PHP)
- Open Source Image Uploading Script (Website Reviews)
- Image capture into HTML/IE and Oracle databases... (Oracle)
- searching multiple fields (PHP)
- What Language is used in software like Adobe Photoshop? (C++)
Other Threads in the C++ Forum
- Previous Thread: what does func(int x, int y, int z=1) mean?
- Next Thread: VC++ console based webserver



Linear Mode