亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android程序開發如何處理圖像格式類及圖像轉換

2020-04-11 11:28:02
字體:
來源:轉載
供稿:網友

在Android程序開發過程中,明確哪些圖像格式類(ImageFormat、PixelFormat及BitmapConfig等)及圖像(JPG、PNG及BMP等)的轉換方式非常重要,在以后的程序開發過程中會起到非常重要的作用。在一個項目開發過程中一款軟件的開發和圖像處理有著密切的關系,特別是在移動應用程序,在視覺效果等方面起到至關重要的作用,因為這關系到用戶體驗度。下面通過代碼實例給大家分享下:

  關于圖像格式類,介紹以下三個:ImageFormat、PixelFormat及BitmapConfig。

  1、ImageFormat(android.graphics.ImageFormat),格式參數有以下幾種:

    int JPEG ,Encoded formats,常量值: 256 (0x00000100)

    int NV16,YCbCr format, used for video,16 (0x00000010)

    int NV21,YCrCb format used for images, which uses the NV21 encoding format,常量值: 17 (0x00000011)

    int RGB_565,RGB format used for pictures encoded as RGB_565,常量值: 4 (0x00000004)

    int UNKNOWN, 常量值:0 (0x00000000)

    int YUY2,YCbCr format used for images,which uses YUYV (YUY2) encoding format,20 (0x00000014)

    int YV12,Android YUV format,This format is exposed to software decoders and applications

    YV12 is a 4:2:0 YCrCb planar format comprised of a WxH Y plane followed by (W/2) x (H/2) Cr and Cb planes

  解釋總是英文的最通俗易懂,這里就不獻丑翻譯了。用法舉例,在構建ImageReader類的對象時,會用到ImageFormat類的圖像格式對象。如

復制代碼 代碼如下:

ImageReader imageReader = ImageReader.newInstance(width, height, ImageFormat.RGB_565, 2);

  imageReader對象表示其緩存中最多存在寬高分別為width和height、RGB_565格式的圖像流兩幀。

在需求中用哪一種圖像格式,要視實際情況而定,后面的類似。

2、PixelFormat(android.graphics.PixelFormat),格式參數有以下幾種:

    int A_8,常量值:8 (0x00000008)

    int JPEG,常量值:256 (0x00000100),constant,已聲明不贊成使用,use ImageFormat.JPEG instead.

    int LA_88,常量值:10 (0x0000000a)

    int L_8, 常量值:9 (0x00000009)

    int OPAQUE,常量值: -1 (0xffffffff),System chooses an opaque format (no alpha bits required)

    int RGBA_4444,常量值:7 (0x00000007)

    int RGBA_5551,常量值:6 (0x00000006)

    int RGBA_8888,常量值:1 (0x00000001)

    int RGBX_8888,常量值:2 (0x00000002)

    int RGB_332,常量值:11 (0x0000000b)

    int RGB_565,常量值:4 (0x00000004)

    int RGB_888,常量值:3 (0x00000003)

    int TRANSLUCENT,常量值: -3 (0xfffffffd),System chooses a format that supports translucency (many alpha bits)

    int TRANSPARENT,常量值:-2 (0xfffffffe),System chooses a format that supports transparency (at least 1 alpha bit)

    int UNKNOWN,常量值: 0 (0x00000000)

    int YCbCr_420_SP,常量值:17 (0x00000011),constant 已聲明不贊成使用 use ImageFormat.NV21 instead

    int YCbCr_422_I,常量值: 20 (0x00000014),constant 已聲明不贊成使用 use ImageFormat.YUY2 instead

    int YCbCr_422_SP,常量值:16 (0x00000010),constant 已聲明不贊成使用 use ImageFormat.NV16 instead

  注意,有四種圖像格式已被聲明不贊成使用,可以用ImaggFormat相對應的格式進行代替。由此可知,兩種圖像格式之間存在相通之處。用法舉例,讓窗口實現漸變的效果,如

復制代碼 代碼如下:

getWindow().setFormat(PixelFormat.RGBA_8888);

  補充說明:RGBA_8888為android的一種32位顏色格式,R、G、B、A分別用八位表示,Android默認的圖像格式是PixelFormat.OPAQUE,其是不帶Alpha值的。

  3、Bitmap.Config(Android.graphics.Bitmap內部類)

  

復制代碼 代碼如下:

Possible bitmap configurations。A bitmap configuration describes how pixels are stored。This affects the quality (color depth) as well as the ability to display transparent/translucent colors。(

官網介紹,大致意思是說:影響一個圖片色彩色度顯示質量主要看位圖配置,顯示圖片時透明還是半透明)。

    ALPHA_8:Each pixel is stored as a single translucency (alpha) channel。(原圖的每一個像素以半透明顯示)

    ARGB_4444:This field was deprecated in API level 13。Because of the poor quality of this configuration, it is advised to use ARGB_8888 instead。(在API13以后就被棄用了,建議使用8888)。

    ARGB_8888 :Each pixel is stored on 4 bytes。 Each channel (RGB and alpha for translucency) is stored with 8 bits of precision (256 possible values) 。This configuration is very flexible and offers the best quality。 It should be used whenever possible。(每個像素占4個字節,每個顏色8位元,反正很清晰,看著很舒服)。

    RGB_565:Each pixel is stored on 2 bytes and only the RGB channels are encoded:red is stored with 5 bits of precision (32 possible values),green is stored with 6 bits of precision (64 possible values) and blue is stored with 5 bits of precision。(這個應該很容易理解了)。

  用法舉例,構建Bitmap對象時,會用到BitmapConfig類圖像格式對象,如:

復制代碼 代碼如下:

Bitmap bitmap = Bitmap.createBitmap(width, height,Bitmap.Config.RGB_565)

  下面來看各種類型圖像之間的轉換都有哪些方法、差異及共同點。

  1、YUV轉JPG

  查閱到的資料大部分是把Yuv圖像數據通過數學運算得到每個像素點的RGB編碼,存入Bitmap對象,再調用Bitmap類自帶的壓縮方法生成JPG圖片。這種方法效率極低,一張480x320分辨率的圖片有20萬個字節,因此運算需要經過20萬次循環。其實android.graphics包下面有一個YuvImage類,可以將數據直接導入:

YuvImage image = new YuvImage(data, ImageFormat.NV21, IMG_WIDTH, IMG_HEIGHT, null);
  前面兩個參數決定了數據源與圖像格式,后面單個參數就不解釋了。

  而YuvImage類正好有一個compressToJPEG(Rect rect, int i, OutputStream)方法,可以直接將數據保存在JPG文件的輸出流中。

  2、PNG轉Bitmap
 

byte[] data = null; File pngImage = null; BufferedOutputStream stream = null; try {   pngImage = new File(outputFile); //outputFile為png圖像名稱   FileOutputStream fstream = new FileOutputStream(pngImage);   stream = new BufferedOutputStream(fstream);   stream.write(data); } catch (Exception e) {   e.printStackTrace(); } finally {   if (stream != null) {     try {     stream.close();     } catch (IOException e) {       e.printStackTrace();     }   } } Bitmap bitmap=BitmapFactory.decodeByteArray(data, 0, data.length);

  如果通過資源(drawable)的形式,那就方便地多,只需要一句話。

復制代碼 代碼如下:

Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.icon);

  雖然沒有華麗的算法,但效果不錯哦,就是想改變圖像屬性時得另外實現。

  3、ARGB轉Bitmap

 Bitmap bitmapOrg = BitmapFactory.decodeByteArray(rawData, 0, rawData.length);  Bitmap bitmapNew = bitmapOrg.copy(Config.ARGB_8888, true);  if(bitmapNew == null)    return; for(int i = 0;i<bitmapNew.getWidth();i++)  {    for(int j =0;j<bitmapNew.getHeight();j++)    {      int col = bitmapNew.getPixel(i, j);      int alpha = col&0xFF000000;      int red = (col&0x00FF0000)>>16;      int green = (col&0x0000FF00)>>8;      int blue = (col&0x000000FF);      int gray = (int)((float)red*0.3+(float)green*0.59+(float)blue*0.11);      int newColor = alpha|(gray<<16)|(gray<<8)|gray;    }  }  sendMsg(bitmapNew);  File file = new File(Environment.getExternalStorageDirectory()+File.separator+"gray"+number+".jpg");  OutputStream out;  try {    out = new FileOutputStream(file);    if(bitmapNew.compress(Bitmap.CompressFormat.JPEG, 100, out))    out.close();  } catch (FileNotFoundException e) {    e.printStackTrace();  } catch (IOException e) {    e.printStackTrace();  } 

      以上全部內容就是在Android程序開發過程中處理圖像格式類及圖像轉換的方法,需要注意的是,在代碼中做了灰度處理,若想得到彩色圖,分別對Bitmap圖像R、G、B三通道賦值。希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
激情成人中文字幕| 国产午夜精品一区理论片飘花| 久久国产精品久久久| 日韩电影免费在线观看中文字幕| 亚洲第一中文字幕在线观看| 97精品国产91久久久久久| 欧美裸身视频免费观看| 97久久精品视频| 国产精品高清免费在线观看| 国产精品精品视频| 97精品国产97久久久久久免费| 亚洲xxx视频| 亚洲经典中文字幕| 亚洲肉体裸体xxxx137| 黑人巨大精品欧美一区免费视频| 91久久久久久久久久| 久久国产精品99国产精| 国产精品高清在线观看| 日韩电影中文字幕在线| 欧美在线中文字幕| 中文字幕久久久av一区| 中文字幕国产精品久久| 最近2019年好看中文字幕视频| 国产精品91在线观看| 色青青草原桃花久久综合| 亚洲va久久久噜噜噜久久天堂| 欧美—级a级欧美特级ar全黄| 国产精品久久久久久久久免费看| 日日骚久久av| 国产视频亚洲精品| 国产精品99导航| 久久免费视频网| 国产精品成人在线| 久久久久久久久中文字幕| 国产三级精品网站| 亚洲激情在线观看视频免费| 久久久久九九九九| 日韩电影中文 亚洲精品乱码| 久久久亚洲网站| 韩剧1988在线观看免费完整版| 尤物99国产成人精品视频| 国产一区二区三区18| 国产精品久久久久久久久免费| 91在线观看免费高清| 青草青草久热精品视频在线观看| 久久国产精品免费视频| 国产精品久久久久av免费| 欧美激情精品久久久久久变态| 一区二区三区高清国产| 日本免费在线精品| 国产精品男人的天堂| 在线观看成人黄色| 91中文字幕在线| 国产成人综合精品在线| 最新国产精品拍自在线播放| 一区二区三区亚洲| 欧美黑人巨大xxx极品| 136fldh精品导航福利| 欧美精品制服第一页| 91久久精品国产91性色| 国产精品国产亚洲伊人久久| 亚洲精品欧美日韩专区| 成人动漫网站在线观看| 日韩高清有码在线| 日韩精品中文字| 精品动漫一区二区三区| 亚洲国产精品99| 中文字幕精品网| 欧美日韩裸体免费视频| 92国产精品久久久久首页| 欧美中文字幕在线播放| 欧美日韩精品中文字幕| 4388成人网| 亚洲视频自拍偷拍| 2019中文字幕在线| 久久久国产91| 中文一区二区视频| 欧美电影免费观看| 久久综合免费视频影院| 中文字幕日韩免费视频| 一区二区三欧美| 欧美亚洲一级片| 亚洲男人天堂九九视频| 欧美有码在线视频| 精品夜色国产国偷在线| 久久久久久久久电影| 久久免费视频观看| www国产精品视频| 国产成人精品免高潮在线观看| 国产一区在线播放| 欧美精品免费看| 亚洲一区二区日本| 久久男人的天堂| 亚洲性生活视频| 91精品久久久久久久久久久| 久久精品2019中文字幕| 亚洲图片制服诱惑| 国产成人精彩在线视频九色| 欧美视频在线观看免费| 久久中文字幕在线| 欧美日韩亚洲精品一区二区三区| 欧美日韩一区二区在线播放| 激情懂色av一区av二区av| 狠狠综合久久av一区二区小说| 亚洲欧美日韩天堂一区二区| 午夜精品一区二区三区在线视| 国产精品中文久久久久久久| 久久久女女女女999久久| 欧美极品少妇xxxxⅹ裸体艺术| 亚洲美女自拍视频| 日韩大片在线观看视频| 国产精品久久久久av免费| 亚洲精品久久久久久久久久久久久| 国产视频久久久久久久| 国模精品视频一区二区三区| 性欧美亚洲xxxx乳在线观看| 亚洲成av人片在线观看香蕉| 亚洲精品影视在线观看| 国产精品成人观看视频国产奇米| 国产视频一区在线| 欧美精品videosex牲欧美| 久久久久免费视频| 成人免费大片黄在线播放| 亚洲高清福利视频| 国产精品久久久久久久久久尿| 国产精品老女人精品视频| 日韩av免费在线观看| 欧美第一淫aaasss性| 亚洲xxxx做受欧美| 亚洲福利影片在线| 久久这里有精品| 久久久精品国产| 色婷婷亚洲mv天堂mv在影片| 亚洲黄色成人网| 97涩涩爰在线观看亚洲| 97久久精品视频| 日韩网站免费观看高清| 亚洲欧美一区二区三区四区| 国产精品免费电影| 久久久精品国产亚洲| 久久在线免费视频| 欧美日产国产成人免费图片| 亚洲欧美在线x视频| 国产福利视频一区| 日韩av免费在线播放| 欧美专区在线视频| 亚洲一级片在线看| 国产精品网站大全| 精品久久久久久久久久久| 国产精品美女无圣光视频| 久久久国产影院| 欧美最猛性xxxxx(亚洲精品)| 欧美一级视频一区二区| 亚洲久久久久久久久久久| 日韩av一区二区在线| 中文字幕精品www乱入免费视频| 中文字幕无线精品亚洲乱码一区| 性欧美亚洲xxxx乳在线观看| 国产日韩欧美日韩| 91精品国产高清久久久久久| 98视频在线噜噜噜国产| 国产精品入口夜色视频大尺度| 久久久欧美精品| 欧美日韩色婷婷|