Android: копирование и вставка изображения не работают! - PullRequest
0 голосов
/ 04 декабря 2010

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

В моей программе я начинаю читать исходное изображение следующим образом:

private void copyImage()
{
    AssetManager am = getResources().getAssets();               
    try{
        image = BitmapFactory.decodeStream(am.open("tasnim.png"));
        imWidth  = image.getWidth();
        imHeight = image.getHeight();
    } 
    catch(IOException e){
        e.printStackTrace();
        System.out.println("Error accoured!");
    }
}

Далее я получу пиксели изображения или извлечу пиксели и сохраню пиксели в массиве целых чисел (rgbstream).

private void getPixelsOfImage()
{
    rgbStream = new int[imWidth * imHeight];
    image.getPixels(rgbStream, 0, imWidth, 0, 0, imWidth, imHeight);
}

наконец, я хочу сохранить его в своем пакете,

private void createPicture()
{
    contextPath = context.getFilesDir().getAbsolutePath();
    String path = contextPath + "/" + picName;

    try{
        FileOutputStream fos = new FileOutputStream(path);
        DataOutputStream dos = new DataOutputStream(fos); 

        for(int i=0; i<rgbStream.length; i++)
            dos.writeByte(rgbStream[i]);

        dos.flush();
        dos.close();
        fos.close();
    }
    catch(IOException e){
        System.out.println("IOException : " + e);
    }
    System.out.println("Picture Created.");
}

Код работает нормально, но ничего не получается !!! :( Когда я проверяю DDMS, он создает новый файл и сохраняет все пиксели (потому что он показывает, что размер этого файла равен 13300, а размер моего исходного изображения равен 100 * 133). когда я нажимаю «извлечь файл с устройства», я могу сохранить его на своем рабочем столе. Однако когда я его открою :) ничего.

Что вы думаете? есть ли проблема в моем коде? Спасибо

1 Ответ

1 голос
/ 04 декабря 2010

Я не знаю, каково ваше намерение - вы хотите записать необработанный файл изображения?

Предполагая, что вы хотите написать JPEG или PNG или что-то еще, вы можете стереть весь свой код исделать что-то намного проще:

Bitmap image = BitmapFactory.decodeStream(am.open("tasnim.png"));
FileOutputStream fos = new FileOutputStream(path);
image.compress(Bitmap.CompressFormat.PNG, 100, fos);

При правильной проверке ошибок, конечно.

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