栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何将位图缓存到本机内存中

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何将位图缓存到本机内存中

说明示例代码显示了如何存储2个不同的位图(较小的位图,但这只是一个演示),回收原始的Java位图,然后将它们还原为Java实例并使用它们。

您可能会猜到,该布局有2个imageViews。我没有在代码中包含它,因为它很明显。

请记住,如果需要,可以将代码更改为您自己的软件包,否则将无法正常工作。

MainActivity.java-如何使用:

package com.example.jnibitmapstoragetest;...public class MainActivity extends Activity  {  @Override  protected void onCreate(final Bundle savedInstanceState)    {    super.onCreate(savedInstanceState);    //    Bitmap bitmap=BitmapFactory.depreResource(getResources(),R.drawable.ic_launcher);    final JniBitmapHolder bitmapHolder=new JniBitmapHolder(bitmap);    bitmap.recycle();    //    Bitmap bitmap2=BitmapFactory.depreResource(getResources(),android.R.drawable.sym_action_call);    final JniBitmapHolder bitmapHolder2=new JniBitmapHolder(bitmap2);    bitmap2.recycle();    //    setContentView(R.layout.activity_main);      {      bitmap=bitmapHolder.getBitmapAndFree();      final ImageView imageView=(ImageView)findViewById(R.id.imageView1);      imageView.setImageBitmap(bitmap);      }      {      bitmap2=bitmapHolder2.getBitmapAndFree();      final ImageView imageView=(ImageView)findViewById(R.id.imageView2);      imageView.setImageBitmap(bitmap2);      }    }  }

JniBitmapHolder.java-JNI和JAVA之间的“桥梁”:

package com.example.jnibitmapstoragetest;...public class JniBitmapHolder  {  ByteBuffer _handler =null;  static    {    System.loadLibrary("JniBitmapStorageTest");    }  private native ByteBuffer jniStoreBitmapData(Bitmap bitmap);  private native Bitmap jniGetBitmapFromStoredBitmapData(ByteBuffer handler);  private native void jniFreeBitmapData(ByteBuffer handler);  public JniBitmapHolder()    {}  public JniBitmapHolder(final Bitmap bitmap)    {    storeBitmap(bitmap);    }  public void storeBitmap(final Bitmap bitmap)    {    if(_handler!=null)      freeBitmap();    _handler=jniStoreBitmapData(bitmap);    }  public Bitmap getBitmap()    {    if(_handler==null)      return null;    return jniGetBitmapFromStoredBitmapData(_handler);    }  public Bitmap getBitmapAndFree()    {    final Bitmap bitmap=getBitmap();    freeBitmap();    return bitmap;    }  public void freeBitmap()    {    if(_handler==null)      return;    jniFreeBitmapData(_handler);    _handler=null;    }  @Override  protected void finalize() throws Throwable    {    super.finalize();    if(_handler==null)      return;    Log.w("DEBUG","JNI bitmap wasn't freed nicely.please rememeber to free the bitmap as soon as you can");    freeBitmap();    }  }

Android.mk-JNI的属性文件:

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE    := JniBitmapStorageTestLOCAL_SRC_FILES := JniBitmapStorageTest.cppLOCAL_LDLIBS := -llogLOCAL_LDFLAGS += -ljnigraphicsinclude $(BUILD_SHARED_LIBRARY)APP_OPTIM := debugLOCAL_CFLAGS := -g

JniBitmapStorageTest.cpp-“神奇”的东西在这里:

#include <jni.h>#include <jni.h>#include <android/log.h>#include <stdio.h>#include <android/bitmap.h>#include <cstring>#include <unistd.h>#define  LOG_TAG    "DEBUG"#define  LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)#define  LOGE(...)  __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)extern "C"  {  JNIEXPORT jobject JNICALL Java_com_example_jnibitmapstoragetest_JniBitmapHolder_jniStoreBitmapData(JNIEnv * env, jobject obj, jobject bitmap);  JNIEXPORT jobject JNICALL Java_com_example_jnibitmapstoragetest_JniBitmapHolder_jniGetBitmapFromStoredBitmapData(JNIEnv * env, jobject obj, jobject handle);  JNIEXPORT void JNICALL Java_com_example_jnibitmapstoragetest_JniBitmapHolder_jniFreeBitmapData(JNIEnv * env, jobject obj, jobject handle);  }class JniBitmap  {  public:    uint32_t* _storedBitmapPixels;    AndroidBitmapInfo _bitmapInfo;    JniBitmap()      {      _storedBitmapPixels = NULL;      }  };JNIEXPORT void JNICALL Java_com_example_jnibitmapstoragetest_JniBitmapHolder_jniFreeBitmapData(JNIEnv * env, jobject obj, jobject handle)  {  JniBitmap* jniBitmap = (JniBitmap*) env->GetDirectBufferAddress(handle);  if (jniBitmap->_storedBitmapPixels == NULL)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/367139.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号