I found the algorithm to matrix manipulation here. Quoted from there below:
Usually it is scale * rotation * translation. However, if you want to rotate an object around a certain point, then it is scale * point_translation * rotation * object_translation.
Why: First you want to scale the object so that the translations work properly. Then you rotate the axes so the translation takes place on the adjusted axes. Finally you translate the object to it's position.
Sorry to waste your time. In the end, I learned something.
The "point_translation" is a bit confusing for me, but I managed it. The origin of an identity matrix is at (0, 0), with X (right = positive), Y (down = positive), which is also the top left corner of a bitmap. (Don't know how to type that...)
To create the point_translation, we need to move the origin in the opposite direction we intended to move on the bitmap object. That means if we focus on the bitmap only, the origin should be set to move to a spot on the bitmap, then multiply the offset values by -1.
It will move the origin backwards. That's all the explanation I can say. It's a tricky and confusing one to why it works, but that's math for me.