андроид: качество изображений изменено во времени выполнения

Я хочу показать изображения, используя drawBitmap () метод. Но прежде чем я хочу изменить размеры его согласно размерам экрана. У меня есть проблема с качеством изображения результата. Вы видите скриншоты и испытательный кодекс ниже. Как я могу изменить размеры изображений во времени выполнения с хорошим качеством?

Спасибо за решения.

Исходное изображение: текст высокого звука http://dl.dropbox.com/u/709109/gradient.png

Скриншот результата на устройстве: текст высокого звука http://dl.dropbox.com/u/709109/device.png

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;

import java.io.IOException;
import java.io.InputStream;

public class MyActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        LinearLayout container = (LinearLayout) findViewById(R.id.container);
        container.addView(new View(this) {
            @Override
            protected void onDraw(Canvas canvas) {
                Bitmap unscaledBitmap;
                try {
                    InputStream in = getAssets().open("images/gradient.png");
                    unscaledBitmap = BitmapFactory.decodeStream(in);
                    in.close();
                    canvas.drawBitmap(unscaledBitmap, null, new Rect(0, 0, 320, 480), null);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

13
задан shinydev 11 January 2010 в 10:36
поделиться

4 ответа

Пожалуйста, обратитесь к Ответ Romain ниже.

Я хотел бы удалить этот ответ, но я не могу, поскольку он помечен как принято.


Обратите внимание, что Android [Когда этот ответ был изначально написан, без явного запрашивания 32-битного цвета] будет делать только 16-битный цвет, поэтому могут быть времена, когда вы получаете нежелательные артефакты.

Вы также можете попробовать использовать варианты Doury, чтобы сообщить Android автоматически применить дизеров, который, хотя не идеально, может помочь заставить все выглядеть немного лучше.

10
ответ дан 1 December 2019 в 21:12
поделиться

Большой вопрос. Мой ответ: используйте тип A ('<')

  • Вы ясно видите, сколько итераций у вас (7).
  • Разница между двумя конечными точками состоит в ширине диапазона
  • Меньше символов делает его более читаемым
  • Вы чаще имеете общее количество элементов i < strlen (s) , а не индекс последнего элемента , поэтому однородность важна.

Еще одна проблема связана со всей этой конструкцией. i появляется в нем 3 раз , поэтому он может быть ошибочным. Конструкция for-loop говорит , как делать вместо , что делать . Я предлагаю использовать следующее:

BOOST _ FOREACH (i, IntegerInterval (0,7))

Это более ясно, компилирует точно те же команды asm и т.д. Спросите у меня код IntegerInterval, если хотите.

-121--2035369-

Для абсолютной скорости используется сверхразмерный < canvas > внутри < div > с набором overflow: hidden , затем используются обычные методы DOM для прокрутки < canvas > внутри < div > .

Конечно, это приносит в жертву использование памяти в пользу скорости.

-121--3832530-

Извлечение http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html (для использования с unscaledBitmap = BitmapFactory.decaseStream (in);

В изображение можно добавить параметры настройки качества. Я предполагаю, что качество ухудшается, так как вы не сдаете никаких настроек того, как должно обрабатываться изображение.

2
ответ дан 1 December 2019 в 21:12
поделиться

Кроме того, если ваша функция измерения изменений не уважает отношение аспекта изображения, качество затронута. Вы можете найти некоторый алгоритм размера в Интернете Проверьте это

-1
ответ дан 1 December 2019 в 21:12
поделиться

Этот удобный шаблон можно использовать для выполнения во время выполнения.

Вместо возврата кода ошибки (например, HRESULT) возвращается return_code, который утверждает, что он выходит за пределы области действия без считывания значения. Это не статический инструмент анализа, но он тем не менее полезен.

class return_value
{
public:
  explicit return_value(T value)
    :value(value), checked(false)
  {
  }

  return_value(const return_value& other)
    :value(other.value), checked(other.checked)
  {
    other.checked = true;
  }

  return_value& operator=(const return_value& other)
  {
    if( this != &other ) 
    {
      assert(checked);
      value = other.value;
      checked = other.checked;
      other.checked = true;
    }
  }

  ~return_value(const return_value& other)
  {
    assert(checked);
  }

  T get_value()const {
    checked = true;
    return value;
  }

private:
  mutable bool checked;
  T value;
};
-121--1051699-

Я не включаю класс ядра или не строю библиотеку ядра или что-либо из этого.

да, вы:

проблемы обработки «javax/xml/XMLConstants.class»

java. * и javax. * Оба числа. вы можете использовать переключатель --core-library, если хотите проигнорировать это в тестовом приложении, но обратите внимание на предупреждение: "ваше приложение все равно не сможет построить или запустить, в какой-то момент. Пожалуйста, будьте готовы к сердитым клиентам, которые обнаружат, например, что ваше приложение перестает работать после обновления операционной системы. Вы будете виноваты в этой проблеме ".

Правильное исправление, как говорится, для приложения доставки, состоит в переупаковке этих классов (т.е. переместить их в новый каталог, соответствующим образом отредактировать их" упаковочные "строки и обновить" импортные "строки в их вызывающих).

-121--2159438-

Вместо изменения размера во время рисования (что будет очень дорого) попробуйте изменить размер в растровом изображении вне экрана и убедитесь, что значение Bitmap равно 32 битам (ARGB888).

15
ответ дан 1 December 2019 в 21:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: