0

私はアンドロイドが初めてです。私はある種の画像処理をしようとしています。しかし、「このアプリケーション --- が予期せず停止しました。もう一度やり直してください。」というメッセージが表示されます。私が犯している間違いを教えてください

package com.imagep.amit;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.widget.ImageView;

public class ImagepActivity extends Activity {
    /** Called when the activity is first created. */

    Bitmap myBitmap;
    ImageView myImageView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        String imageFileName= "/sdcard/test_vga.jpg";
        File imageFile= new File(imageFileName);
        if (imageFile.exists()) {
            // Load the image from file
            myBitmap= BitmapFactory.decodeFile(imageFileName);
            // Display the image in the image viewer
            myImageView= (ImageView)findViewById(R.id.di);
            if (myImageView!= null) {
                myImageView.setImageBitmap(myBitmap);
            }
        }
        this.processImage();
    }

    private void processImage() {
        brighten(50);
        try {
            String outputPath= "/test_vga_output.jpg";
            int quality = 75;
            FileOutputStream fileOutStr= new FileOutputStream(outputPath);
            BufferedOutputStream bufOutStr= new BufferedOutputStream(fileOutStr);
            myBitmap.compress(CompressFormat.JPEG, quality, bufOutStr);
            bufOutStr.flush();
            bufOutStr.close();
        } catch (FileNotFoundException exception) {
            Log.e("debug_log", exception.toString());
        } catch (IOException exception) {
            Log.e("debug_log", exception.toString());
        }
        myImageView.setImageBitmap(myBitmap);
    }

    private void brighten(int i) {
        int width = myBitmap.getWidth();
        int height = myBitmap.getHeight();
        int[] pix = new int[width * height];
        myBitmap.getPixels(pix, 0, width, 0, 0, width, height);
        // Apply pixel-by-pixel change
        int index = 0;
        for(int y = 0; y < height; y++) {
            for (int x = 0; x < width; x++) {
                int r = (pix[index] >> 16) & 0xff;
                int g = (pix[index] >> 8) & 0xff;
                int b = pix[index] & 0xff;
                r = 0;
                g = 0;
                b = 0;
                pix[index++] = 0xff000000| (r << 16) | (g << 8) | b;
            } // x 
        } // y
        // TODO Auto-generated method stub
    }
}
}
4

1 に答える 1

2

、DDMS、または Eclipse の DDMS パースペクティブを使用adb logcatして、LogCat を調べ、エラーに関連するスタック トレースを調べます。

さらに、特に間違っているため、 path をハードワイヤしないでください --外部ストレージのルートを取得するために使用します。/sdcardEnvironment.getExternalStorageDirectory()

最後に、実際の問題はおそらく次のようなものです。

String outputPath= "/test_vga_output.jpg";

これは無効なパスです。どこに書いていると思っているのかわかりませんが、そこに書くことはできません。ただし、それ以外にも問題が発生する可能性があり、スタック トレースはそれらを特定するのに役立ちます。

于 2012-04-16T14:41:33.663 に答える