сохранить растровое изображение в формате JPEG - PullRequest
2 голосов
/ 10 января 2012

этот вопрос прост, мы можем:

public static void writePhotoJpg(Bitmap data, String pathName) {
    File file = new File(pathName);
    try {
        file.createNewFile();
        // BufferedOutputStream os = new BufferedOutputStream(
        // new FileOutputStream(file));

        FileOutputStream os = new FileOutputStream(file);
        data.compress(Bitmap.CompressFormat.JPEG, 100, os);
        os.flush();
        os.close();


    } catch (Exception e) {
        e.printStackTrace();
    }
}

, но этот метод не все успешны: потому что "Примечание: не все форматы поддерживают все битовые конфигурации напрямую, поэтому возможно, что битовая карта возвращается из BitmapFactoryможет иметь другую битовую глубину и / или может потерять альфа на пиксель (например, JPEG поддерживает только непрозрачные пиксели). "в документе Google.без удачи у меня есть эта проблема: в предварительном просмотре камеры я использовал:

 private Bitmap  printScreen() {
    View view = this.getWindow().getDecorView();
    // if (view.isDrawingCacheEnabled()) {
    view.setDrawingCacheEnabled(true);
    Calendar c = Calendar.getInstance();
    String date = c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1) + "-" + c.get(Calendar.DAY_OF_MONTH) + "  " + c.get(Calendar.HOUR_OF_DAY) + "-" + c.get(Calendar.MINUTE) + "-" + c.get(Calendar.SECOND);
    // }
    view.buildDrawingCache();

    Bitmap bmp = view.getDrawingCache();

    return  bmp ;
}

, поэтому, когда я использовал setImageBitmap (bmp), выглядит очень хорошо, но когда я открываю файл сохранения jpeg, это черный jpeg.так что я думаю, что метод сохранения не очень хорошо, вы можете сказать мне другой метод сохранения?

Ответы [ 2 ]

3 голосов
/ 10 января 2012

вы можете попробовать это:

 public static final int BUFFER_SIZE = 1024 * 8;
 static void writeExternalToCache(Bitmap bitmap, File file) {
    try {
        file.createNewFile();
        FileOutputStream fos = new FileOutputStream(file);
        final BufferedOutputStream bos = new BufferedOutputStream(fos, BUFFER_SIZE);
        bitmap.compress(CompressFormat.JPEG, 100, bos);
        bos.flush();
        bos.close();
        fos.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {

    }

}

это работает в моем коде, поэтому, если это не работает, попробуйте найти ошибку:

1.показ растрового изображения верно?

2. Где находится файл сохранения растрового изображения?файл имеет ограничение?например, size или ...

если ошибка является причиной вашего поста, вы можете попытаться снова декодировать растровое изображение, используя Bitmap.Config.RGB_565.

0 голосов
/ 10 января 2012

Использовать .getRootView() метод представления ИЛИ макет содержит это представление, используйте его (например) mainLayout содержит одно представление изображения с индексом 1, затем mainlayou.getChildAt(1), чтобы получить представление.

1007 * Е.Г. *

View v1 = mainLayout.getChildAt(1);     //OR  View v1 = mainLayout.getRootView();   
        v1.setDrawingCacheEnabled(true);
        Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
        v1.setDrawingCacheEnabled(false);
        return bitmap;

Надеюсь, полезно для вас ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...