I’ve never done this, but it does seem interesting so I’ll throw out some ideas. One thing you could do is store a slope with each tile and scale your player’s velocity based on that slope. So for instance, a flat tile that you walk on top of would have a slope of zero and a tile that slopes at a 45 degree angle would have slope 1. So you could do something like:
(avoid dividing by zero)
if(tileSlope != 0)
playerSpeed = playerSpeed/(2*tileSlope);
else
//restore the original player speed
Then you have the problem of needing to change the direction of his movement so it matches the slope. If you are moving your characters using a speed scalar value and a velocity normalized vector, then you just need the velocity vector to match the slope of the tile:
velocity.x = 1-slope;
velocity.y = slope;
and if you aren’t already moving your characters this way, you may want to do it like this:
player.x += velocity.xplayerSpeeddelta (if its a time based game).
You could also represent the collision bounds of the tile using java.awt.geom.Area and figure out the slope and where to place the character on each tile from there. If you are still interested in checking for transparent pixels, I believe you could do this:
int pixelColor = bufferedImage.getRGB(x, y);
boolean isTransparent = (pixelColor & 0xff000000)== 0 ? true : false;
assuming bufferedImage is the BufferedImage representing your tile.