相关疑难解决方法(0)

如何正确下采样图像?

背景

创建一个具有大量高质量图像的应用程序,我决定将图像缩小到所需的大小(这意味着如果图像大于屏幕,我会缩小它的尺寸).

问题

我注意到在某些设备上,如果图像缩小,它们变得模糊/像素化,但在同一设备上,对于相同的目标imageView大小,如果图像没有缩小尺寸,它们看起来很好.

我试过的

我已经决定进一步检查这个问题,并创建了一个显示问题的小型POC应用程序.

在向您展示代码之前,这里是我正在谈论的演示:

在此输入图像描述

看到差异有点难,但你可以看到第二个有点像素化.这可以在任何图像上显示.

public class MainActivity extends Activity
  {
  @Override
  protected void onCreate(final Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final ImageView originalImageView=(ImageView)findViewById(R.id.originalImageView);
    final ImageView halvedImageView=(ImageView)findViewById(R.id.halvedImageView);
    final ImageView halvedBitmapImageView=(ImageView)findViewById(R.id.halvedBitmapImageView);
    //
    final Bitmap originalBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.test);
    originalImageView.setImageBitmap(originalBitmap);
    halvedImageView.setImageBitmap(originalBitmap);
    //
    final LayoutParams layoutParams=halvedImageView.getLayoutParams();
    layoutParams.width=originalBitmap.getWidth()/2;
    layoutParams.height=originalBitmap.getHeight()/2;
    halvedImageView.setLayoutParams(layoutParams);
    //
    final Options options=new Options();
    options.inSampleSize=2;
    // options.inDither=true; //didn't help
    // options.inPreferQualityOverSpeed=true; //didn't help
    final Bitmap bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.test,options);
    halvedBitmapImageView.setImageBitmap(bitmap);
    }
  }
Run Code Online (Sandbox Code Playgroud)

XML:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
  android:layout_height="match_parent" tools:context=".MainActivity"
  android:fillViewport="true">
  <HorizontalScrollView android:layout_width="match_parent"
    android:fillViewport="true" android:layout_height="match_parent">
    <LinearLayout android:layout_width="match_parent"
      android:layout_height="match_parent" …
Run Code Online (Sandbox Code Playgroud)

android decode bitmap downsampling pixelate

14
推荐指数
1
解决办法
2万
查看次数

Volley - NetworkImageView有时不显示错误图像?

因此,我决定尝试使用Google IO 2013上显示的新Volley库.

我已经尝试过使用简单的解决方案NetworkImageView来显示多个图像GridView.

它工作得很好,并显示图像,但如果我让它下载图像,然后我在下载过程中关闭WiFi,它不会显示错误,好像一切仍然加载.不仅如此,如果我恢复连接,它不会恢复加载.

为什么会发生,我该如何解决?也许它实际上是一个错误?

这是我的示例代码,如果有人想尝试一下(BitmapCacheLru代码在这里):

public class MainActivity extends Activity {
    private static final int COLUMNS_COUNT = 4;
    private RequestQueue _requestQueue;
    private ImageLoader _imageLoader;

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        _requestQueue=Volley.newRequestQueue(this);
        _imageLoader=new ImageLoader(_requestQueue, new BitmapLruCache());

        final GridView gridView = new GridView(this);
        gridView.setNumColumns(COLUMNS_COUNT);
        final int screenWidth = getResources().getDisplayMetrics().widthPixels;

        gridView.setAdapter(new BaseAdapter() {
            @Override
            public View getView(final int position, final View convertView, final ViewGroup parent) {
                NetworkImageView …
Run Code Online (Sandbox Code Playgroud)

error-handling android internet-connection android-volley networkimageview

3
推荐指数
1
解决办法
7426
查看次数