日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Silverlight中實現(xiàn)WriteableBitmap轉(zhuǎn)為Byte流

在銀光Silverlight中,對于WriteableBitmap是本文的重點。這里將為大家講解具體的實現(xiàn)過程,希望能對今后的開發(fā)工作有所幫助。

算法核心:對WriteableBitmap的所有像素點做循環(huán)遍歷,然后存入Byte[]數(shù)組中,再轉(zhuǎn)換為MemoryStream輸出,下面是代碼:

 
 
  1. Code
  2. private void ButtonSave_Click(object sender, RoutedEventArgs e)
  3.         {
  4.             WriteableBitmap bitmap = new WriteableBitmap(MyStackPanel, null);
  5.             if (bitmap != null)
  6.             {
  7.                 SaveFileDialog saveDlg = new SaveFileDialog();
  8.                 saveDlg.Filter = "JPEG Files (*.jpeg)|*.jpeg";
  9.                 saveDlg.DefaultExt = ".jpeg";
  10.                 if ((bool)saveDlg.ShowDialog())
  11.                 {
  12.                     using (Stream fs = saveDlg.OpenFile())
  13.                     {
  14.                         SaveToFile(bitmap, fs);
  15.                         MessageBox.Show("File save Complete");
  16.                     }
  17.                 }
  18.             }
  19.         }
  20.         private static void SaveToFile(WriteableBitmap bitmap, Stream fs)
  21.         {
  22.             int width = bitmap.PixelWidth;
  23.             int height = bitmap.PixelHeight;
  24.             int bands = 3;
  25.             byte[][,] raster = new byte[bands][,];
  26.             for (int i = 0; i < bands; i++)
  27.             {
  28.                 raster[i] = new byte[width, height];
  29.             }
  30.             for (int row = 0; row < height; row++)
  31.             {
  32.                 for (int column = 0; column < width; column++)
  33.                 {
  34.                     int pixel = bitmap.Pixels[width * row + column];
  35.                     raster[0][column, row] = (byte)(pixel >> 16);
  36.                     raster[1][column, row] = (byte)(pixel >> 8);
  37.                     raster[2][column, row] = (byte)pixel;
  38.                 }
  39.             }
  40.             FluxJpeg.Core.ColorModel model = new FluxJpeg.Core.ColorModel { colorspace = FluxJpeg.Core.ColorSpace.RGB };
  41.             FluxJpeg.Core.Image img = new FluxJpeg.Core.Image(model, raster);
  42.             //Encode the Image as a JPEG
  43.             MemoryStream stream = new MemoryStream();
  44.             FluxJpeg.Core.Encoder.JpegEncoder encoder = new FluxJpeg.Core.Encoder.JpegEncoder(img, 100, stream);
  45.             encoder.Encode();
  46.             //Back to the start
  47.             stream.Seek(0, SeekOrigin.Begin);
  48.             //Get teh Bytes and write them to the stream
  49.             byte[] binaryData = new Byte[stream.Length];
  50.             long bytesRead = stream.Read(binaryData, 0, (int)stream.Length);
  51.             fs.Write(binaryData, 0, binaryData.Length);
  52.         }

我對其中的這一段尤其不滿意,自覺是性能的關(guān)鍵,有沒有更高效的算法快速從WriteableBitmap直接得到像素的Byte[]數(shù)組?

 
 
  1. Code
  2. for (int row = 0; row < height; row++)
  3.             {
  4.                 for (int column = 0; column < width; column++)
  5.                 {
  6.                     int pixel = bitmap.Pixels[width * row + column];
  7.                     raster[0][column, row] = (byte)(pixel >> 16);
  8.                     raster[1][column, row] = (byte)(pixel >> 8);
  9.                     raster[2][column, row] = (byte)pixel;
  10.                 }
  11.             }

下面為演示代碼,需要引入FJCore,如果您再編譯的時候發(fā)現(xiàn)路徑不正確,請出新引入一下,我已經(jīng)那個把FJCoer放置在了壓縮包中的refer文件夾下。

鏈接:http://www.cnblogs.com/zhangxuguang2007/archive/2009/11/05/1596721.html


分享標題:Silverlight中實現(xiàn)WriteableBitmap轉(zhuǎn)為Byte流
標題網(wǎng)址:http://www.5511xx.com/article/dhidjio.html