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

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

## 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 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?

##### 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 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 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 on other sites
Okay, I'll report back my findings after tweaking my algorithm. This post will be edited at a later time.

• ### What is your GameDev Story?

In 2019 we are celebrating 20 years of GameDev.net! Share your GameDev Story with us.

• 28
• 16
• 10
• 10
• 11
• ### Forum Statistics

• Total Topics
634112
• Total Posts
3015580
×