Well a brute force method you could employ would be to keep track of the source rectangle used to draw the background. Let's say for example that your screen is 800x600 and your background PNG is 1600x1200. In your code let's keep a source rectangle called srcRect. As you move the camera, you change the position of the source rectangle. This would be a very simplified way of viewing the rest of the background image as your sprite moves.
Here is some very simple code to help express my example:
class MyGame : Game
{
Rectangle srcRect;
int screenLeft, screenTop;
const int SCREEN_WIDTH = 800;
const int SCREEN_HEIGTH = 600;
...
public void Update(GameTime gameTime)
{
//if player moves right
{ screenLeft += moveAmount; }
//if player moves left
{ screenLeft -= moveAmount; }
//This is just sample, but you get the idea
//Make sure you do bounds checking, that is screenLeft never goes below 0
//and also screenLeft is less than background width - SCREEN_WIDTH.
}
public void Draw()
{
srcRect.X = screenLeft;
srcRect.Y = screenTop;
spriteBatch.Begin();
spriteBatch.Draw(backgroundTexture, new Rectangle(0,0,800,600), srcRect, Color.White);
spriteBatch.End();
}
}
I hope this makes sense, let me know if you want further clarification. This is a really simple approach. I hope it somewhat answers your question.