Jump to content
  • Advertisement
Sign in to follow this  
tom_mai78101

How to obtain pixel X and Y position after panning the bitmap around on the screen?

This topic is 2010 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I know that you can get the pixel's position with the following algorithm:

 

y * bitmapWidth + x = pixel position (x, y)

 

When you pan the bitmap around, I thought you can get the pixel's position by adding the delta differences X, and Y to the original pixel's X and Y position. I later found out this isn't correct. What if I panned the bitmap to the negative X and negative Y axes?

 

So, I'm kind of stuck here. Anyone knows how to solve this?

Share this post


Link to post
Share on other sites
Advertisement

It's not clear what you mean by "panning" a bitmap. Can you provide a more complete description of what you're doing?

 

Are you trying to determine the pixel's position on the screen, or the position within the bitmap?

Share this post


Link to post
Share on other sites

It's not clear what you mean by "panning" a bitmap. Can you provide a more complete description of what you're doing?
 
Are you trying to determine the pixel's position on the screen, or the position within the bitmap?


The latter: Position within the bitmap using the screen mouse coordinates.

In the editor, the origins is at the top left corner of the drawing area. In the drawing area, there exists a bitmap (a white Canvas, similar to what you will see when you run MS Paint the first time) that is smaller than the drawing area. I can pan (or move) the bitmap around with a Hands tool (similar to Adobe Photoshop's Hand tool, where it moves the entire Canvas to where you wanted to move to). But even when you are panning/moving the bitmap, the origins is still at the top left corner of the drawing area. In other words, the drawing area's X and Y coordinates are not affected by how much you pan/move the bitmap around inside.

Now, I wanted to calculate the position of a pixel within the bitmap, not the position of a pixel on the screen. Now, how do I obtain the position of an arbitrary pixel within the bitmap after the bitmap has been panned/moved around in the drawing area?

Hope this is clear enough.

Share this post


Link to post
Share on other sites

If I understand correctly, you know the position of the upper-left corner of the bitmap relative to the drawing area. Given the mouse position relative to the drawing area, the position of the mouse coordinates relative to the bitmap are:

 

mx = mouseX - bitmap_upr_left.x

my = mouseY - bitmap_upr_left.y

 

You don't mention what OS you're using,  but make sure you have both bitmap position and mouse position relative to the same area. You mentioned screen mouse coordinates - be sure to convert that position to the drawing area. In Windows, for instance, if the drawing area is the client area of the window, use ScreenToClient( hwnd, &mousePt) before you do the calcs.

 

FYI: "panning" is more commonly understood to be a change in position of the viewpoint, not the position of what's being viewed.

Edited by Buckeye

Share this post


Link to post
Share on other sites

I know that you can get the pixel's position with the following algorithm:

y * bitmapWidth + x = pixel position (x, y)

When you pan the bitmap around, I thought you can get the pixel's position by adding the delta differences X, and Y to the original pixel's X and Y position. I later found out this isn't correct. What if I panned the bitmap to the negative X and negative Y axes?

 

So, I'm kind of stuck here. Anyone knows how to solve this?

 

y * bitmapWidth + x, breaks down if you pass in negative values, you would need to keep x and y separate, and cap either one if they hit less than 0.  Or do something else when you hit negative values, like wrap or return a set color, clamp to the border color, etc.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!