重新缩放位图后我遇到了质量问题 我加载来自资产的图像,因此解码它们必须由Stream
完成这是我的方法
InputStream is = getAssets().open(lol.get(zpositions));
Bitmap bm = BitmapFactory.decodeStream(is);
Bitmap mBitmap = Bitmap.createScaledBitmap(bm,width,hight, false);
我试过
Options options = new BitmapFactory.Options();
options.inScaled = false;
options.inPreferredConfig = Config.ARGB_8888;
Bitmap bitmapsrc = BitmapFactory.decodeStream(is, null, options);
Bitmap mBitmap = Bitmap.createScaledBitmap(bitmapsrc,width,hight, false);
但仍然是同一个问题
任何想法如何绕过这个问题?谢谢
这是代码
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="1dip"
android:background="@android:color/black" >
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:adjustViewBounds="true"
/>
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fullimage);
Display display = getWindowManager().getDefaultDisplay();
width = display.getWidth();
height = display.getHeight();
AdView adView = (AdView)findViewById(R.id.ad);
adView.loadAd(new AdRequest());
Intent i = getIntent();
List<String> lol = i.getStringArrayListExtra("lol");
this.lol = lol;
pagerPosition = i.getExtras().getInt("id");
{
public Bitmap getbitBitmap() throws IOException{
positions = MyPageChangeListener.getCurrentPage();
if (positions == 0) {
zpositions = pagerPosition;
}
InputStream is = getAssets().open(lol.get(zpositions));
Options options = new BitmapFactory.Options();
options.inScaled = false;
Bitmap bitmapsrc = BitmapFactory.decodeStream(is, null, options);
return bitmapsrc;
}
private void CropWallpaper() throws IOException {
Bitmap mBitmap = Bitmap.createScaledBitmap(bitmapsrc,width, height, false);
try {
setWallpaper(mBitmap);
Toast.makeText(this,"Cropped successfully" , Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Toast.makeText(this,"Failed to Crop" , Toast.LENGTH_SHORT).show();
// TODO: handle exception
}
}
答案 0 :(得分:0)
当增加图像尺寸时,图像质量总是明显降低到一定程度。因此,当您将图像缩放为“适合屏幕大小”时,“资源”文件夹中资源图像的分辨率小于显示它的屏幕。
解决方案是使用至少与您计划显示它的最大屏幕大小相同的图像。您可以通过两种方式执行此操作:
OutOfMemoryError
。最后,如果您遇到OutOfMemoryError
,您的选项将是:
当然,您也可以使用BitmapFactory.Options
(例如32位(ARGB444
)并在放大时抖动,但这只会在增加图像大小以进行显示时有所帮助。
答案 1 :(得分:0)
由于您已尝试BitmapOptions
的所有组合,请在创建缩放位图时尝试设置过滤器参数。
Bitmap mBitmap = Bitmap.createScaledBitmap(bitmapsrc,width,hight, true);
在放大时平滑图像。