我想将图像的位图发送到服务类,我想在那里使用该位图来设置壁纸 我使用的代码是....
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == PICK_IMAGE_MULTIPLE) {
imagesPathList = new ArrayList<String>();
String[] imagesPath = data.getStringExtra("data").split("\\|");
try {
lnrImages.removeAllViews();
} catch (Throwable e) {
e.printStackTrace();
}
for (int i = 0; i < imagesPath.length; i++) {
imagesPathList.add(imagesPath[i]);
yourbitmap = BitmapFactory.decodeFile(imagesPath[i]);
resized[i] = Bitmap.createScaledBitmap(yourbitmap, 480,
800, true);
ImageView imageView = new ImageView(this);
imageView.setImageBitmap(resized[i]);
imageView.setAdjustViewBounds(true);
lnrImages.addView(imageView);
}
}
}
}
case R.id.btnsetwall:
Intent i = new Intent(MainActivity.this, WallService.class);
Log.i("Main Activity", "Before putExtra");
i.putExtra("Imagess", resized);
Log.i("Main Activity", "After putExtra");
startService(i);
Log.i("Main Activity", "Start Service");
break;
//如果我使用i.putExtra(&#34; Imagess&#34;,已调整大小);它给出了错误,如果我不使用此线路服务开始
在服务类......
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
Log.i("on create", "Service Created");
}
logcat是......
05-06 15:53:57.932: I/Main Activity(14185): Before putExtra
05-06 15:53:57.932: I/Main Activity(14185): After putExtra
05-06 15:53:57.942: E/JavaBinder(14185): !!! FAILED BINDER TRANSACTION !!!
05-06 15:53:57.952: I/Main Activity(14185): Start Service
答案 0 :(得分:0)
Bitmap类本身实现了parcelable接口。
所以你可以通过调用传递位图数组
Bitmap[] btmaps = new Bitmap[10];
Intent intent = new Intent();
intent.putExtra("bitmaps", btmaps);
你可以通过意图
接收这个数组Bitmap[] btmpList = (Bitmap[]) intent.getParcelableArrayExtra("bitmaps");
答案 1 :(得分:0)
如果您想在应用的不同区域使用位图,则不要传递它们。你是一个非常有限的内存机器,在堆中尽可能少地保留位图。
你这样做的方式,你只需将它临时保存到文件中,然后在需要的时候再加载它。
public static String getCacheDir(Context ctx) {
return Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) ||!Environment.isExternalStorageRemovable() ?
ctx.getExternalCacheDir().getPath() : ctx.getCacheDir().getPath();
}
保存位图
public static File saveBitmap(Bitmap bitmap, String filename, String path, boolean recycle) {
FileOutputStream out=null;
try {
File f = new File(path,filename);
if(!f.exists()) {
f.createNewFile();
}
out = new FileOutputStream(f);
if(bitmap.compress(Bitmap.CompressFormat.PNG, 90, out)) {
return f;
}
} catch (Exception e) {
Log.e(TAG, "Could not save bitmap", e);
} finally {
try{
out.close();
} catch(Throwable ignore) {}
if(recycle) {
bitmap.recycle();
}
}
return null;
}
然后重新加载它。
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap bitmap = BitmapFactory.decodeFile(photoPath, options);
selected_photo.setImageBitmap(bitmap);
You could also look into Picasso为您处理异步加载,并通过磁盘缓存和更多功能增强性能
Picasso.with(getContext()).load(bitmapFile).into(imageView);
答案 2 :(得分:-1)
您可以根据您的要求以不同的方式解决此问题。
你可以使用静态变量来存储imageBitmap
你可以通过意图传递
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
Intent in1 = new Intent(this, Activity2.class);
in1.putExtra("image",byteArray);