我的应用会显示图片和文字,当我的用户点击所说的图片时,我希望将其放大。
到目前为止,我通过Activity
显示Bitmap
:
// ImageView containing the image.
final ImageView apd = (ImageView) view.findViewById(R.id.apd_image);
apd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Save ImageView as Bitmap
apd.setDrawingCacheEnabled(true);
apd.buildDrawingCache(true);
Bitmap bitmap = apd.getDrawingCache();
// Create intent and set image to display.
Intent intent = new Intent(getActivity(), GalleryDetailsActivity.class);
intent.putExtra("image", bitmap);
//Start details activity
startActivity(intent);
apd.destroyDrawingCache();
}
});
以下是Activity
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gallery_details_activity);
Bitmap bitmap = getIntent().getParcelableExtra("image");
ImageView imageView = (ImageView) findViewById(R.id.image);
imageView.setImageBitmap(bitmap);
}
但是当我点击我的图片时,我在调试器中收到以下错误消息:
E / JavaBinder:!!!失败的粘合剂交易!!!
一些研究让我降低了图像质量,以便像这样显示:
final float densityMultiplier = getResources().getDisplayMetrics().density;
int h = (int) (50 * densityMultiplier);
int w = (int) (h * bitmap.getWidth() / ((double) bitmap.getHeight()));
bitmap = Bitmap.createScaledBitmap(bitmap, w, h, true);
它有效,但它不是我想要的。
是否有办法扩大我的形象并保持其质量?
编辑:
按照建议我现在将我的照片保存在我的文件系统中,如下所示:
private void savePicture(String filename, Bitmap b, Context ctx){
try {
ObjectOutputStream oos;
FileOutputStream out;// = new FileOutputStream(filename);
out = ctx.openFileOutput(filename, Context.MODE_PRIVATE);
oos = new ObjectOutputStream(out);
b.compress(Bitmap.CompressFormat.PNG, 100, oos);
oos.close();
oos.notifyAll();
out.notifyAll();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
并将其加载到活动中,如下所示:
private Bitmap loadPicture(String filename) {
Bitmap b = null;
try {
FileInputStream fis = openFileInput(filename);
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(fis);
} catch (IOException e1) {
e1.printStackTrace();
}
b = BitmapFactory.decodeStream(ois);
try {
ois.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return b;
}
我现在想以更大的尺寸显示它。
答案 0 :(得分:0)
不要通过意图传递图像。意图意味着保存少量数据,而不是图像。将其写入文件系统,并通过intent传递文件名。