Android多媒體映像的處理

來源:互聯網
上載者:User

標籤:

一.映像的兩種分類
位元影像:也被稱為點陣映像或者繪製映像,是由像素的一系列單個點組成的。這些點可以進行不同的排列和染色以構成圖樣。當放大位元影像時,從而使得線條和形狀顯得參差不齊。
向量圖:也被稱為物件導向的映像或繪圖映像,在數學上定義為一系列由先串連的點。也就是常說的數學函數的軌跡。

二.映像的載入
1.普通圖片載入到記憶體
先將一張小圖片拷貝到記憶卡中,布局就一個ImageView和Button,點擊Button載入出映像。
Button的點擊事件:

public void loadImage(View view){if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ String path=Environment.getExternalStorageDirectory()+"/img_small_1.jpg"; Bitmap bitmap =BitmapFactory.decodeFile(path); iv.setImageBitmap(bitmag);    }}

2.大圖片載入
如今的圖片像素往往比手機螢幕還要大,若是將大圖片顯示到這樣的手機螢幕上容易記憶體溢出(以前),而且還不能完美的展示圖片的精度。這裡涉及到一個載入大圖片需要用到的“採樣率”。
我們需要先擷取當前裝置的螢幕資訊,再擷取需要載入的圖片的大小,計算出採樣率,載入圖片。

    public void loadImage(View view){        if(Environment.getExternalStorageState()                .equals(Environment.MEDIA_MOUNTED)){            String path=Environment.getExternalStorageDirectory()+"/img_big_1.jpg";            Options options=new Options();            //設定圖片的採樣率            //擷取螢幕的寬高            WindowManager windowManager=(WindowManager) getSystemService(WINDOW_SERVICE);//          int screenwidth=windowManager.getDefaultDisplay().getWidth();//          int screenheigh=windowManager.getDefaultDisplay().getHeight();            Display display=windowManager.getDefaultDisplay();            Point point=new Point();            display.getSize(point);            int screenWidth=point.x;            int screenHeigh=point.y;            System.out.println(screenWidth);            System.out.println(screenHeigh);            //擷取原圖的寬高            try {                ExifInterface exifInterface=new ExifInterface(path);                int imageWidth=exifInterface.getAttributeInt(ExifInterface.TAG_IMAGE_WIDTH, 0);                int imageHeigth=exifInterface.getAttributeInt(ExifInterface.TAG_IMAGE_LENGTH, 0);                int sampleWidth=(int)(imageWidth*1.0f/screenWidth+0.5f);//加0.5就是為了四捨五入                int sampleHeight=(int)(imageHeigth*1.0f/screenHeigh+0.5f);                int sample=(int)(Math.sqrt(sampleWidth*sampleWidth+sampleHeight*sampleHeight)+0.5f);//採樣率公式                options.inSampleSize=sample;//原寬*1/4,原長*1/4                Bitmap bitmap=BitmapFactory.decodeFile(path,options);                iv.setImageBitmap(bitmap);            } catch (IOException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }            options.inSampleSize=2;//原寬*1/4,原長*1/4        }    }

三.映像的操作處理
首先先講一下如何畫出和原來映像一模一樣的圖片:

private ImageView iv;    //圖紙    private Bitmap baseBitmap,copyBitmap;    //畫板    private Canvas canvas;    //畫筆    private Paint paint;    public void btn(View view){        //拿到原圖        baseBitmap =BitmapFactory.decodeResource(getResources(), R.drawable.img_small_1);        //先拿到一張與原圖大小一樣的紙    copyBitmap=Bitmap.createBitmap(baseBitmap.getWidth(),baseBitmap.getHeight(),baseBitmap.getConfig());        //將這張紙固定在畫板上        canvas=new Canvas(copyBitmap);        //找畫筆        paint=new Paint();        //按照一定規則處理圖片        Matrix matrix=new Matrix();//1:1縮放        matrix.setScale(0.5f, 1.0f);//寬和長不同縮放設定        matrix.setTranslate(100f, 50f);//平移操作設定        canvas.drawBitmap(baseBitmap, matrix, paint);參數分別表示參照圖片,處理效果,畫筆        //放到組件上        iv.setImageBitmap(copyBitmap);

在Android中對映像進行處理,那麼一定用到Matrix這個類。Matrix對映像的處理可分為五種基本變換。
1.映像的縮放處理

matrix.setScale(0.5f, 1.0f);

2.映像的位移處理

matrix.setTranslate(100f, 50f);//圖片在畫板中移動,原點是左上方,整數表示往右和下方移動

3.映像的旋轉處理

1.matrix.setRotate(-45);//順時針旋轉多少度,圓點是左上方,若是要逆時針旋轉,角度設定成負數        2.matrix.setRotate(45,baseBitmap.getWidth()/2,baseBitmap.getHeight()/2);//設定以某個圓點順時針(正數表示順時針方向)旋轉,後邊兩個參數分別表示x座標和y座標

4.映像的鏡面處理

matrix.setScale(-1f,1f);//縮放處理,翻轉,往左翻了了個(即把寬翻了個個),翻轉後圖片在畫布的左方,需要再次進行平移操作matrix.postTranslate(baseBitmap.getWidth(),0);//如果要對圖片進行多次操作,那麼要用postxxx方法,不能直接用setxxx方法追加

5.映像的倒影處理

matrix.setScale(1f,-1f);將圖片以y軸進行縮放處理,翻了個個,翻轉後圖片在畫布的上方,需要將其下移操作matrix.postTranslate(0, baseBitmap.getHeight());

Android多媒體映像的處理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.