Оптимальное использование BitmapFactory.Options.inSampleSize для скорости

Спасибо Schermvlieger за то, что задал этот вопрос на anddev.org ,

Я просто копирую его вопрос в SO, так как никто не ответил на другом сайте, и я также столкнулся с той же проблемой.

Мне было интересно, что было бы оптимальным использованием BitmapFactory.Options.inSampleSize в отношении скорости отображения изображение.
В документации упоминается использование значений, которые являются степенью двойки, поэтому я работаю с 2, 4, 8, 16 и т. Д.

Меня интересуют следующие моменты:

  1. Должен ли я передискретизировать до наименьшего размера, который есть все еще больше, чем разрешение экрана, или мне следует уменьшить размер выборки до размера, достаточного, чтобы избежать ошибки OutOfMemoryError ?
  2. Как можно рассчитать максимальный размер изображения, которое все еще может отображаться, не исчерпывая объем памяти? Имеет ли значение глубина цвета изображения и глубина отображения?
  3. Эффективно ли отображать изображения с помощью двух механизмов ( BitmapFactory для больших файлов, setImageURI ( ) для меньших) Я, кстати, использую ImageSwitcher .
  4. Поможет ли это создать Bitmap , BitmapFactory. Raise Exception ('ошибка теста') def main (): err = None try: func1 () except: ...

    У меня есть фрагмент кода, похожий на этот:

    import sys
    
    def func1():
        func2()
    
    def func2():
        raise Exception('test error')
    
    def main():
        err = None
    
        try:
            func1()
        except:
            err = sys.exc_info()[1]
            pass
    
        # some extra processing, involving checking err details (if err is not None)
    
        # need to re-raise err so caller can do its own handling
        if err:
            raise err
    
    if __name__ == '__main__':
        main()
    

    When func2 вызывает исключение. Я получаю следующую трассировку:

    Traceback (most recent call last):
      File "err_test.py", line 25, in 
        main()
      File "err_test.py", line 22, in main
        raise err
    Exception: test error
    

    Отсюда я не вижу, откуда исходит исключение. Исходная трассировка потеряна.

    Как я могу сохранить исходную трассировку и восстановить ее? Я хочу увидеть что-то похожее на это:

    Traceback (most recent call last):
      File "err_test.py", line 26, in 
        main()
      File "err_test.py", line 13, in main
        func1()
      File "err_test.py", line 4, in func1
        func2()
      File "err_test.py", line 7, in func2
        raise Exception('test error')
    Exception: test error
    

65
задан Henrik Heimbuerger 7 February 2013 в 15:06
поделиться