-
December 21st, 2008, 06:08 AM
#1
Hotspots in .Net
Hi All
I am creating a Windows based application, my main screen is based on a picture, instead of using buttons, I would like to create hotspots on the picture for navigation, is this possible in the .net Windows application, this is not for the web.
Cheers
Djbel
-
December 21st, 2008, 07:41 PM
#2
Re: Hotspots in .Net
You can load an image directly onto a form, or onto a picturebox control. Then, you can capture mouse clicks, and compare the location to 'spots' that you activate, and fire in the 'click event' and produce the action.
-
December 22nd, 2008, 05:11 AM
#3
Re: Hotspots in .Net
Hi dglienna
Thanks for the reply. unfortuantly I am not exactly clear on what you mean. Do you mean have a set of cordinates for each area, then take the position of a mouse click and check if it is within a set of coordinates, if it is then fire a click event? If this is the case just got a couple of questions, how do I set up a coordinate location for an area on a picture and secondly how would I do this for complex shapes such as circles, ect?
Cheers
Djbell
-
December 22nd, 2008, 06:18 AM
#4
Re: Hotspots in .Net
It is going be a bit more complicated if you are using irregular shaped hotspots.
Using the mouseup event will give you coordinates clicked in the picbox. You will need a way to determine which region the clicked coordinates are in.
Rectangular and circular regions should be relatively easy. I would create a class for your regions containing the following vars: region_type (enum), parameter1, parameter2
region_type specifies whether the region is circular or rectangular. If circular, parameter1 is midpoint of circle and parameter2 is radius. If rectangular, parameter1 is upper left corner and parameter2 is lower right.
You will need a routine that accepts your coordinates, checks through your regions and calls the appropriate function (this could happen in the region class if you do it that way).
ps: have you looked at WPF ? I think this can be done on a WPF form.
Last edited by HairyMonkeyMan; December 22nd, 2008 at 06:40 AM.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning. - Rich Cook
0100 1101 0110 1001 0110 0011 0110 1000 0110 0001 0110 0101 0110 1100 0010 0000 0100 0101 0110 1100 0110 1100 0110 0101 0111 0010
-
December 22nd, 2008, 07:18 PM
#5
Re: Hotspots in .Net
Not with a class of shapes, if they are all the same size (within circle or square dim's)
Gets more complex with different sized shape, though
-
December 23rd, 2008, 12:40 AM
#6
Re: Hotspots in .Net
IF you control the picture, there is a simple trick...Use the LSB of each color. This allows for 7 hotspots in an impage without ANY calculations.
Stegography in action!!!!
TheCPUWizard is a registered trademark, all rights reserved. (If this post was helpful, please RATE it!)
2008, 2009,2010
In theory, there is no difference between theory and practice; in practice there is.
* Join the fight, refuse to respond to posts that contain code outside of [code] ... [/code] tags. See here for instructions
* How NOT to post a question here
* Of course you read this carefully before you posted
* Need homework help? Read this first
-
December 23rd, 2008, 12:49 AM
#7
Re: Hotspots in .Net
Which 7 are those?
-
December 23rd, 2008, 10:59 AM
#8
Re: Hotspots in .Net
Originally Posted by dglienna
Which 7 are those?
Use a 24/32 bit format. Make sure the "real" picture has only EVEN color values (LSB or R,G,B are 0.)
Now modify the picture to the the LSB to 001,010,011,100,101,110,111 (R,G,B) for seven different areas.
Now when you geta click, look at a the pixel. Grab the LSB of R,G,B; combine. If 000 then not a hotspot, otherwise it is one of the 7...
TheCPUWizard is a registered trademark, all rights reserved. (If this post was helpful, please RATE it!)
2008, 2009,2010
In theory, there is no difference between theory and practice; in practice there is.
* Join the fight, refuse to respond to posts that contain code outside of [code] ... [/code] tags. See here for instructions
* How NOT to post a question here
* Of course you read this carefully before you posted
* Need homework help? Read this first
-
December 23rd, 2008, 06:23 PM
#9
Re: Hotspots in .Net
That sounds great. I'm trying to imagine it in my head, but a picture would be worth, well, 1000 words? (plus a after I spread some holiday cheer)
-
December 23rd, 2008, 06:55 PM
#10
Re: Hotspots in .Net
Here...
This blue picture is primarily made op of one color, with EVEN R,G,B values...
Some of the pixels had had 1 lsb added to one or more of the colors.
TheCPUWizard is a registered trademark, all rights reserved. (If this post was helpful, please RATE it!)
2008, 2009,2010
In theory, there is no difference between theory and practice; in practice there is.
* Join the fight, refuse to respond to posts that contain code outside of [code] ... [/code] tags. See here for instructions
* How NOT to post a question here
* Of course you read this carefully before you posted
* Need homework help? Read this first
-
December 23rd, 2008, 07:05 PM
#11
Re: Hotspots in .Net
TheCPUWizard, the solution is of course interesting. But how maintainable is it? Altering the background image on pixel level, at least for me, is a tedious task . Also, scalability is a factor to consider.
Since you're using .NET, I suggest using one of the windows forms skinning techniques out there, or even create a HTML page, with regions, and place a web browser control on your form.
Personally, I would go with skinning.
-
December 23rd, 2008, 07:12 PM
#12
Re: Hotspots in .Net
Maintaining the pictures is not a problem..IF you have a decemt layer based graphic editor. The primary advantage is that all of the information is contained in the image itself.
--- If you need more hotspots, use 2 LSB, this give you 63 distinct ones on a single image.
--- Alternatively, supply TWO images, one which you display and ony (often just 8 bit resultion) where each color in the second represents a different hotspot.
I use this technique heavily becuase I am NOT a graphic designer, and outsource all my work [shameless plug: My eldest daughter graduated last year from university with a degree in graphic arts..].
Most other techniques involve a tighter coupling beteween the visual information and the coding....
TheCPUWizard is a registered trademark, all rights reserved. (If this post was helpful, please RATE it!)
2008, 2009,2010
In theory, there is no difference between theory and practice; in practice there is.
* Join the fight, refuse to respond to posts that contain code outside of [code] ... [/code] tags. See here for instructions
* How NOT to post a question here
* Of course you read this carefully before you posted
* Need homework help? Read this first
-
December 23rd, 2008, 07:56 PM
#13
Re: Hotspots in .Net
Originally Posted by TheCPUWizard
Now modify the picture to the the LSB to 001,010,011,100,101,110,111 (R,G,B) for seven different areas.
Now when you geta click, look at a the pixel. Grab the LSB of R,G,B; combine. If 000 then not a hotspot, otherwise it is one of the 7...
So, that means you change all pixels within the 'hotspot' so that you know when you're in the 'hotspot'
That would be hard to resize, I'd imagine...
The two-image idea sounds a lot better. You could resize only the visible image, and scale the mouse-clicks
-
December 23rd, 2008, 08:01 PM
#14
Re: Hotspots in .Net
Originally Posted by dglienna
So, that means you change all pixels within the 'hotspot' so that you know when you're in the 'hotspot'
Exactly. Not that this will NOT work with "lossy" compressed formats like jpeg).
That would be hard to resize, I'd imagine...
The two-image idea sounds a lot better. You could resize only the visible image, and scale the mouse-clicks
Resizing (regardless of methodology) does introduce some difficulty. In most cases a little "fuzzyness" in the determination may be acceptable, but in others it can be a problem.
TheCPUWizard is a registered trademark, all rights reserved. (If this post was helpful, please RATE it!)
2008, 2009,2010
In theory, there is no difference between theory and practice; in practice there is.
* Join the fight, refuse to respond to posts that contain code outside of [code] ... [/code] tags. See here for instructions
* How NOT to post a question here
* Of course you read this carefully before you posted
* Need homework help? Read this first
-
January 13th, 2009, 07:47 AM
#15
Re: Hotspots in .Net
I took the chance to try something..
here is a quick project just to test if this can work ..
I created a second Jpg in greyscale with each region in a different color .. there is still a little 'Noise' between regions as i did not do it 100%, but just a quick test..
I used steps of 10 for each region, so region 1 is 0, region 2 is 10, etc ... (255 = background)
I used two pictureboxes, one to show the Sized /Stretched image, and a hidden one to hold full size image..
I then translated the cursor position to actual on the image and get the Regions color on that spot.. no problems with image stretch color distortion with this method..
Hope it works for you..
Gremmy...
--EDIT--
Fixed Zip on later post
Last edited by GremlinSA; January 15th, 2009 at 02:50 AM.
Reason: Newfile uploaded...
Articles VB6 : Break the 2G limit - Animation 1, 2 VB.NET : 2005/8 : Moving Images , Animation 1 , 2 , 3 , User Controls
WPF Articles : 3D Animation 1 , 2 , 3
Code snips: VB6 Hex Edit, IP Chat, Copy Prot., Crop, Zoom : .NET IP Chat (V4), Adv. ContextMenus, click Hotspot, Scroll Controls
Find me in ASP.NET., VB6., VB.NET , Writing Articles, My Genealogy, Forum
All VS.NET: posts refer to VS.NET 2008 (Pro) unless otherwise stated.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|