天天看點

使用JSR234實作代碼的縮放

JSR234是進階媒體API,在原有的MMA的基礎上增加了很多Control,目前nokia的s60第三版已經開始支援jsr234,他主要支援對圖檔、聲音等多媒體資訊的一些進階處理,下面是使用其對圖檔縮放的方法:

使用JSR234實作代碼的縮放
使用JSR234實作代碼的縮放
使用JSR234實作代碼的縮放
使用JSR234實作代碼的縮放

     public  Image zoomImage(String path, int  newWidth, int  newHeight) ... {

使用JSR234實作代碼的縮放

        Image re = null;

使用JSR234實作代碼的縮放

        MediaProcessor mp = null;

使用JSR234實作代碼的縮放

        ByteArrayOutputStream baos = new ByteArrayOutputStream();

使用JSR234實作代碼的縮放
使用JSR234實作代碼的縮放

        try ...{

使用JSR234實作代碼的縮放

            mp = GlobalManager.createMediaProcessor("image/png");

使用JSR234實作代碼的縮放

            InputStream in = this.getClass().getResourceAsStream(path);

使用JSR234實作代碼的縮放

            mp.setInput(in,MediaProcessor.UNKNOWN);

使用JSR234實作代碼的縮放

            mp.setOutput(baos);

使用JSR234實作代碼的縮放

            ImageTransformControl itc = (ImageTransformControl)mp.getControl("javax.microedition.amms.control.imageeffect.ImageTransformControl");

使用JSR234實作代碼的縮放

            int sw = itc.getSourceWidth();

使用JSR234實作代碼的縮放

            int sh = itc.getSourceHeight();

使用JSR234實作代碼的縮放

            int ow = newWidth;

使用JSR234實作代碼的縮放

            int oh = newHeight;

使用JSR234實作代碼的縮放

            itc.setSourceRect(0,0,sw,sh);

使用JSR234實作代碼的縮放

            itc.setTargetSize(ow,oh,0);

使用JSR234實作代碼的縮放

            itc.setEnabled(true);

使用JSR234實作代碼的縮放

            mp.start();

使用JSR234實作代碼的縮放

            mp.complete();

使用JSR234實作代碼的縮放

            byte b[] = baos.toByteArray();

使用JSR234實作代碼的縮放

            System.out.println(b.length);

使用JSR234實作代碼的縮放

            int[] ints = new int[b.length / 4];

使用JSR234實作代碼的縮放

            int intcount, bytecount;

使用JSR234實作代碼的縮放
使用JSR234實作代碼的縮放

            for (intcount = 0, bytecount = 0; bytecount < b.length; ) ...{

使用JSR234實作代碼的縮放

                ints[intcount] =

使用JSR234實作代碼的縮放

                    (( ((int)(b[bytecount + 0])) << 24) & 0xFF000000) |  //A

使用JSR234實作代碼的縮放

                    (( ((int)(b[bytecount + 1])) << 16) & 0x00FF0000) |  //R

使用JSR234實作代碼的縮放

                    (( ((int)(b[bytecount + 2])) << 8)  & 0x0000FF00) |  //G

使用JSR234實作代碼的縮放

                    (( ((int)(b[bytecount + 3]))        & 0x000000FF) ); //B

使用JSR234實作代碼的縮放

                intcount++;

使用JSR234實作代碼的縮放

                bytecount+=4;

使用JSR234實作代碼的縮放

            }

使用JSR234實作代碼的縮放
使用JSR234實作代碼的縮放

            re = Image.createRGBImage(

使用JSR234實作代碼的縮放

            ints, ow, oh, true);

使用JSR234實作代碼的縮放
使用JSR234實作代碼的縮放
使用JSR234實作代碼的縮放

        } catch (MediaException ex) ...{

使用JSR234實作代碼的縮放

            ex.printStackTrace();

使用JSR234實作代碼的縮放

        }

使用JSR234實作代碼的縮放
使用JSR234實作代碼的縮放

        return re;

使用JSR234實作代碼的縮放

    } 在J2ME中可以直接使用這個方法,當然,先确定你的手機支援jsr234,縮放隻是對圖檔處理的一個很小的方面,有興趣的可以看看WTK2.5中關于JSR234的DEMO