Monday, August 20, 2012

Re: [android-developers] Draw OverlappedBitmap - (Draw onto itself).

On 20/08/12 20:15, Nathan wrote:
I would like to do a copy on a bitmap from itself, ie, shift pixels in a bitmap by copying from one rectangle to another rectangle. The src and destination rectangles might overlap. This "snake eating its own tail" trick did work in Windows and Windows Mobile. 

I see there is one issue logged about this on Android.

http://code.google.com/p/android/issues/detail?id=3205

However, I don't know that it was ever supposed to work. I can't find any documentation that suggests it should.

Has anyone come up with an efficient solution for this? I know that having yet another bitmap buffer the same size would work, but it is something I want to avoid as it increases memory footprint (its not a small bitmap).

I'm not using native code, so a solution using smaller bitmaps and drawing calls may not be very efficient.

What is the minimum Android version you're targetting?

If you're not afraid of using native code - starting from API-8 (Android 2.2) you can relatively easily access Bitmap pixels from C code.
http://mobilepearls.com/labs/native-android-api/#bitmap

Calling AndroidBitmap_getInfo(..) would give you the dimensions, format and stride,  AndroidBitmap_lockPixels(...) gives you the pointer to raw pixel data (it's just and array of pixels - bytes per pixel depends on bitmap format, the stride parameter tells you how many bytes to skip to get to next row). The rest is just moving/copying bytes...

Note, that no bitmap copy is done this way, you can edit the Bitmap in place - it's thus really efficient.
 
Another questions is - what are you actually trying to achieve? Perhaps there's another way around it?

Best Regards,
Przemek


0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home


Real Estate