In one of my voxel engines, the voxel block explosion was done by creating a defined amount of minature blocks at the explosion point, and applying physical properties to them, eg velocity and gravity. Then, set them at random directions, and draw them. So, the actual voxel model wasnt really being disintegrated, but the voxel particles gave that impression.
That is one approach.
Another approach is to actually break up the voxel model. To achieve that under testing, was to detach the smaller voxels from the model, and apply the same techique for the previously mentioned explosion. No new voxels were created.
In relation to pixels, I would imagine it possible, yes.
An approach might be to look at using a rendertarget for the sprite, and where the texture pixel coords match the explosion points, store those coloured pixels in a dictionary, with position and colour values.
Then, the rendertarget would form the source of the sprite without those pixels present. Use finally some type of custom particle manager to explode the pixels from the dictionary, using a technique similar to the explosion of the voxel model that I mention in the second part of this response.
As requested in the comment, here is an example of using a rendertarget to regenerate a sprite:
Texture2D _spriteTexture ;
protected override void LoadContent()
// Create a new SpriteBatch, which can be used to draw textures.
_spriteBatch = new SpriteBatch(GraphicsDevice);
_spriteTexture = this.Content.Load<Texture2D>("SomeTexture");
And then, in a new method, something similar to:
_renderTarget = new RenderTarget2D(_graphicsDevice, 16, 16, false, _graphicsDevice.DisplayMode.Format, DepthFormat.Depth24);
sourceRectangle = new Rectangle(0, 0, 16, 16);
_spriteBatch.Draw(_spriteTexture, new Vector2(0, 0), sourceRectangle,
Color.White, 0, new Vector2(0, 0), 1f, SpriteEffects.None, 1);
texture = _renderTarget;
texture becomes the output sprite, as a Texture2D. The code isnt really doing a change here to the spriteTexture. But it illustrates how the spriteTexture is rendered to a new RenderTarget. The actual change would happen just prior to the spriteBatch.Draw method call, where some effect, or modification to the spriteTexture would be done, eg, removing some pixels because of the explosion.