I'm developing a simple game engine for practise purpose, and I used codes like this to do collision detection (fake code):

    bool PhysicalObject.isCollideWith(rect: PhysicalObject) =>
      x + width >= rect.x && rect.y <= y + height &&
        x <= rect.x + rect.width &&
        y <= rect.y + rect.height

But this treats all objects as a rectangle.  
What I want is to detect collision when two objects are overlapping on pixel level (I used `java.awt.Graphics` to draw my game objects).

What's the best way of doing that? Can I create a two-dimension array that represent each pixel and store the pointer to the game object that the corresponding pixel belongs to?