Как проверить, есть ли у растрового изображения данные? - PullRequest
0 голосов
/ 01 ноября 2019

Что у меня есть: Я загружаю изображение с URL-адреса и преобразую его в растровое изображение.

Что происходит: Иногда сервер возвращает изображениев других случаях просто небольшой заполнитель.

Что я пытаюсь сделать: Как узнать, содержит ли растровое изображение изображение (изображение довольно среднего размера по сравнению с заполнителем, которыйкрошечный).

Код, используемый для получения изображения с URL:

private Bitmap getBitmap(String url)
{
    File f=fileCache.getFile(url);

    //from SD cache
    Bitmap b = decodeFile(f);
    if(b!=null)
        return b;

    //from web
    try {
        Bitmap bitmap=null;
        URL imageUrl = new URL(url);
        HttpURLConnection conn = (HttpURLConnection)imageUrl.openConnection();
        conn.setConnectTimeout(30000);
        conn.setReadTimeout(30000);
        conn.setInstanceFollowRedirects(true);
        InputStream is=conn.getInputStream();
        OutputStream os = new FileOutputStream(f);
        Utils.CopyStream(is, os);
        os.close();
        bitmap = decodeFile(f);
        return bitmap;
    } catch (Exception ex){
        ex.printStackTrace();
        return null;
    }
}

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

если заполнитель каждый раз одного размера, просто замените 60 на его высоту в пикселях. Это просто берет Bitmap и возвращает true, если высота Bitmap соответствует вашему заполнителю.

private bool isPlaceholder (Bitmap bmp)
{
    //presumably, the placeholder never changes size
    //if it's 60 then we've got a placeholder
    if (bmp.Height == 60){
        return true;
    }
    else{
        return false;
    }
}

РЕДАКТИРОВАТЬ: Это работает, только если заполнитель всегда меньше, чемобраз. В противном случае вам, возможно, понадобится более сложная логика, например, проверка высоты и размера изображения в байтах. ИЛИ Высота и Ширина. Если высота всегда меньше, вы можете использовать что-то вроде выше.

0 голосов
/ 01 ноября 2019

Определяет минимальную ширину и высоту изображения, и если высота и ширина растрового изображения меньше этого минимума, это означает, что это заполнитель. Например

Bitmap bitmap = decodeFile(f);
int minHeight = 500;
int minWidth = 500;
if(bitmap.getHeight() < minHeight && bitmap.getWidth() < minWidth){
//it is a placeholder
}
...