Jump to content

  • Log In with Google      Sign In   
  • Create Account

Interested in a FREE copy of HTML5 game maker Construct 2?

We'll be giving away three Personal Edition licences in next Tuesday's GDNet Direct email newsletter!

Sign up from the right-hand sidebar on our homepage and read Tuesday's newsletter for details!


We're also offering banner ads on our site from just $5! 1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


2D Bitmap Matrix manipulation: How does one flip a bitmap?


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
1 reply to this topic

#1 tom_mai78101   Members   -  Reputation: 575

Like
0Likes
Like

Posted 24 September 2012 - 06:11 AM

Currently, I have created a simple SurfaceView that blits a bitmap onto the screen, like how Canvas does in Java. I'm currently playing around the Matrix variable, so that I can pass it to the Canvas.drawBitmap() as a parameter.

The matrix manipulation, something that is used prominently in bitmap blitting, is a bit difficult for me to grasp correctly. Especially at the point where the Matrix involves pre- or post- when doing calculations (preScale(), preSkew(), preTranslate(), etc., and postScale(), postSkew(), etc.)

I'm using the class "android.graphics.Matrix", and not the "android.opengl.Matrix", just to clarify.

[source lang="java"] Matrix matrix = new Matrix(); matrix.reset();[/source]
I think this initializes the matrix variable.

[source lang="java"]Canvas c = holder.lockCanvas(); c.drawRGB(128, 128, 120); matrix.postScale(-1, 1); c.drawBitmap(bitmap, matrix, null); holder.unlockCanvasAndPost©;[/source]
After that, the bitmap itself does nothing. What am I doing wrong? Isn't it?:

[source lang="java"] 1 0 * [-1] = -1 0 0 1 [ 1] 0 1[/source]

Edited by tom_mai78101, 24 September 2012 - 06:13 AM.


Sponsor:

#2 tom_mai78101   Members   -  Reputation: 575

Like
0Likes
Like

Posted 25 September 2012 - 08:05 AM

Update [Solved]:

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. Posted Image

EDIT:

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. Posted Image

Edited by tom_mai78101, 25 September 2012 - 10:15 AM.





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS