1

我想在我的应用程序中使用 ImageMagick 库来处理与图像相关的东西。我已经为它制作了示例代码,但执行后,它只显示微调器,不显示处理后获得的图像。我不知道是什么问题?这是我正在使用的代码:

 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);
        // InputStream stream = getResources().openRawResource(R.raw.app_notes);


        try {
            final MagickImage img = new MagickImage(new ImageInfo("/sdcard/newsample.jpeg"));

//          setContentView(R.layout.main);
            Spinner s = (Spinner) findViewById(R.id.spinner);

            ArrayAdapter adapter = ArrayAdapter.createFromResource(MainActivity.this,R.array.effects, android.R.layout.simple_spinner_item);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            s.setAdapter(adapter);

            s.setOnItemSelectedListener(new OnItemSelectedListener() {

                public void onItemSelected(AdapterView<?> parent, View view,
                        int pos, long id) {
                    ProgressThread t = new ProgressThread(img, pos);
                    //runOnUiThread(t);
                    t.run();
                }

                public void onNothingSelected(AdapterView<?> parent) {
                    // Do nothing.
                }
            });
            ImageView iv = (ImageView) findViewById(R.id.imageView);
            iv.setImageBitmap(MagickBitmap.ToBitmap(img));
        } catch (MagickApiException e) {
            e.printStackTrace();
        } catch (MagickException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        /*
         * TextView tv = new TextView(this);
         * tv.setText(DisplayImageMetaData.displayMagickImage(img));
         * setContentView(tv);
         */
        int count = 2;
        MagickImage images[] = new MagickImage[count];
        for (int i = 0; i < count; i++) {
            String path = "/mnt/sdcard/" + String.valueOf(i + 1) + ".jpeg";
            try {
                images[i] = new MagickImage(new ImageInfo(path));
            } catch (MagickException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        try {
            MagickImage image = new MagickImage(images);
            image.setImageFormat("gif");
            String fn = Environment.getExternalStorageDirectory() + "/Pictures/test.gif";
            image.setFileName(fn);
            ImageInfo info = new ImageInfo(fn);
            info.setMagick("gif");
            //image.writeImage(info);
            byte blob[] = image.imageToBlob(info);
            FileOutputStream fos = new FileOutputStream(fn);
            fos.write(blob);
            fos.close();
            FileOutputStream testOS = new FileOutputStream("/mnt/sdcard/test.txt");
            testOS.write("abc".getBytes());
            testOS.close();
        } catch (MagickException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    protected Dialog onCreateDialog(int id, Bundle bundle) {
        switch (id) {
        case PROGRESS_DIALOG:
            /*
             * ProgressDialog dialog =
             * ProgressDialog.show(AndroidMagickActivity.this, "",
             * "Loading. Please wait...", true);
             */
            progressDialog = new ProgressDialog(MainActivity.this);
            progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            progressDialog.setMessage("Loading...");
            return progressDialog;
            // return dialog;
        default:
            return null;
        }
    }


    /** Nested class that performs progress calculations (counting) */
    private class ProgressThread extends Thread {

        MagickImage img;
        int pos;

        ProgressThread(MagickImage image, int pos) {
            this.img = image;
            this.pos = pos;
        }

        public void run() {
            int effect = 0;
            MainActivity.this.showDialog(PROGRESS_DIALOG);
            switch (pos) {
            case 1:
                effect = NoiseType.UndefinedNoise;
                break;
            case 2:
                effect = NoiseType.UniformNoise;
                break;
            case 3:
                effect = NoiseType.GaussianNoise;
                break;
            case 4:
                effect = NoiseType.MultiplicativeGaussianNoise;
                break;
            case 5:
                effect = NoiseType.ImpulseNoise;
                break;
            case 6:
                effect = NoiseType.LaplacianNoise;
                break;
            case 7:
                effect = NoiseType.PoissonNoise;
                break;
            }
            Bitmap bitmap = null;
            try {
                ImageView iv = (ImageView) findViewById(R.id.imageView);

                MagickImage image = null;
                if (pos < 8)
                    image = img.addNoiseImage(effect);
                else if (pos == 9)
                    image = img.blurImage(5, 1);
                else if (pos == 10)
                    image = img.charcoalImage(5, 1);
                else if (pos == 11)
                    image = img.edgeImage(0);
                if (image != null) {

                    bitmap = MagickBitmap.ToBitmap(image);
                    iv.setImageBitmap(bitmap);
                }

                MainActivity.this.dismissDialog(PROGRESS_DIALOG);
            } catch (MagickException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }    

这是xml文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
    />

</LinearLayout>

这是日志文件:

09-25 22:45:13.322: V/Magick(554): Attempting to read from file /mnt/sdcard/1.jpeg
09-25 22:45:13.741: V/Magick(554): ReadImage completed
09-25 22:45:13.741: V/Magick(554): Attempting to read from file /mnt/sdcard/2.jpeg
09-25 22:45:14.112: V/Magick(554): ReadImage completed
09-25 22:45:14.534: D/dalvikvm(164): GC_EXPLICIT freed 151K, 7% free 21612K/23111K, paused 530ms+341ms
09-25 22:45:17.378: W/ActivityManager(80): Launch timeout has expired, giving up wake lock!
09-25 22:45:18.417: W/ActivityManager(80): Activity idle timeout for ActivityRecord{4117ad80 com.example.libmagick/.MainActivity}
09-25 22:45:23.281: I/ActivityManager(80): Process com.android.mms (pid 257) has died.
09-25 22:45:23.312: D/CountryDetectorService(80): No listener is left
09-25 22:45:30.272: D/dalvikvm(164): GC_EXPLICIT freed 57K, 7% free 21556K/23111K, paused 1035ms+723ms
09-25 22:45:34.442: D/dalvikvm(195): GC_EXPLICIT freed 112K, 5% free 12588K/13191K, paused 1724ms+88ms
09-25 22:45:41.332: D/dalvikvm(314): GC_EXPLICIT freed 158K, 5% free 12155K/12675K, paused 1287ms+291ms
09-25 22:45:59.741: V/TLINE(554): new: android.text.TextLine@40c43e30
09-25 22:46:00.462: D/dalvikvm(554): GC_FOR_ALLOC freed 3165K, 22% free 14154K/17927K, paused 158ms
09-25 22:46:00.462: I/dalvikvm-heap(554): Grow heap (frag case) to 15.274MB for 1155904-byte allocation
09-25 22:46:00.662: D/dalvikvm(554): GC_CONCURRENT freed <1K, 15% free 15283K/17927K, paused 11ms+4ms
09-25 22:46:00.922: D/dalvikvm(554): GC_FOR_ALLOC freed 1K, 15% free 15282K/17927K, paused 71ms
09-25 22:46:00.952: I/dalvikvm-heap(554): Grow heap (frag case) to 17.232MB for 2054928-byte allocation
09-25 22:46:01.062: D/dalvikvm(554): GC_FOR_ALLOC freed 0K, 14% free 17288K/19975K, paused 95ms
09-25 22:46:01.262: D/dalvikvm(554): GC_CONCURRENT freed <1K, 14% free 17289K/19975K, paused 9ms+4ms
09-25 22:46:02.402: D/dalvikvm(164): GC_EXPLICIT freed 5K, 7% free 21551K/23111K, paused 5ms+129ms
09-25 22:46:06.522: D/dalvikvm(554): GC_FOR_ALLOC freed 1286K, 18% free 16453K/19975K, paused 73ms
09-25 22:46:06.542: I/dalvikvm-heap(554): Grow heap (frag case) to 17.881MB for 1536016-byte allocation
09-25 22:46:06.722: D/dalvikvm(554): GC_FOR_ALLOC freed <1K, 17% free 17953K/21511K, paused 91ms
09-25 22:46:06.922: D/dalvikvm(554): GC_CONCURRENT freed <1K, 17% free 17953K/21511K, paused 7ms+4ms
09-25 22:46:07.212: D/dalvikvm(554): GC_FOR_ALLOC freed <1K, 17% free 17952K/21511K, paused 72ms
09-25 22:46:07.232: I/dalvikvm-heap(554): Grow heap (frag case) to 19.345MB for 1536016-byte allocation
09-25 22:46:07.422: D/dalvikvm(554): GC_FOR_ALLOC freed 0K, 16% free 19452K/23047K, paused 107ms
09-25 22:46:07.531: D/dalvikvm(554): GC_FOR_ALLOC freed 0K, 16% free 19452K/23047K, paused 97ms
09-25 22:46:07.552: I/dalvikvm-heap(554): Grow heap (frag case) to 20.810MB for 1536016-byte allocation
09-25 22:46:07.722: D/dalvikvm(554): GC_FOR_ALLOC freed 0K, 15% free 20952K/24583K, paused 138ms
09-25 22:46:08.781: I/ActivityManager(80): Displayed com.example.libmagick/.MainActivity: +1m1s413ms
09-25 22:46:08.781: W/InputManagerService(80): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@411f68b8
4

0 回答 0