西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁編程開發(fā)其它知識(shí) → Windows Phone 照片角度處理開發(fā)技巧

Windows Phone 照片角度處理開發(fā)技巧

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來源:西西整理時(shí)間:2011/12/18 22:17:12字體大。A-A+

作者:西西點(diǎn)擊:34次評(píng)論:0次標(biāo)簽: WindowsPhone

  • 類型:WM|WP7平臺(tái)大。1.5M語言:中文 評(píng)分:3.6
  • 標(biāo)簽:
立即下載

在實(shí)際項(xiàng)目中,可能需要用戶從相冊中選擇圖片然后進(jìn)行相應(yīng)的處理。但是不知道大家有沒有發(fā)現(xiàn)這樣一種情況,就是手機(jī)里看是豎著的,但是上傳到微博或者哪里的時(shí)候確實(shí)橫著的。一種情況是你拿手機(jī)豎著拍照得話,照片就是橫著的,雖然在手機(jī)里看是豎著的。(可能有點(diǎn)抽象,遇到此情況的同學(xué)應(yīng)該深有感觸)

那么我們在客戶端中應(yīng)該如何處理這種情況呢?一種想法是獲取圖片的角度,如果是90°,就把照片翻轉(zhuǎn)過來,再進(jìn)行相應(yīng)的操作。那這樣就涉及到2個(gè)問題

1. 如何獲取相冊中照片的角度

2. 如何翻轉(zhuǎn)已有的照片(流、或者Bitmap或者WriteableBitmap)

查看了系統(tǒng)的API,并沒有對(duì)相片的角度提供支持,但是我們可以使用ExifLib開源庫去做。

下述的方法就是獲取選取圖片的角度的

/// <summary>
/// get angle of photo
/// </summary>
/// <param name="stream">photo stream</param>
/// <param name="filename">photo name</param>
/// <returns>angle of the photo</returns>
public static int GetAngle(Stream stream, string filename)
{
    ExifLib.ExifOrientation _orientation;
    int _angle = 0;
    stream.Position = 0;
    JpegInfo info = ExifReader.ReadJpeg(stream, filename);
    if (info!=null)
    {
        _orientation = info.Orientation;
        switch (info.Orientation)
        {
            case ExifOrientation.TopLeft:
            case ExifOrientation.Undefined:
                _angle = 0;
                break;
            case ExifOrientation.TopRight:
                _angle = 90;
                break;
            case ExifOrientation.BottomRight:
                _angle = 180;
                break;
            case ExifOrientation.BottomLeft:
                _angle = 270;
                break;

        }
    }
    return _angle;
}

獲取到角度后,如果角度是90°,即是反的,我們需要將其糾正過來,可以使用如下的方法:

private Stream RotateStream(Stream stream, int angle)
{
    stream.Position = 0;
    if (angle % 90 != 0 || angle < 0) throw new ArgumentException();
    if (angle % 360 == 0) return stream;

    BitmapImage bitmap = new BitmapImage();
    bitmap.SetSource(stream);
    WriteableBitmap wbSource = new WriteableBitmap(bitmap);

    WriteableBitmap wbTarget = null;
    if (angle % 180 == 0)
    {
        wbTarget = new WriteableBitmap(wbSource.PixelWidth, wbSource.PixelHeight);
    }
    else
    {
        wbTarget = new WriteableBitmap(wbSource.PixelHeight, wbSource.PixelWidth);
    }

    for (int x = 0; x < wbSource.PixelWidth; x++)
    {
        for (int y = 0; y < wbSource.PixelHeight; y++)
        {
            switch (angle % 360)
            {
                case 90:
                    wbTarget.Pixels[(wbSource.PixelHeight - y - 1) + x * wbTarget.PixelWidth] = wbSource.Pixels[x + y * wbSource.PixelWidth];
                    break;
                case 180:
                    wbTarget.Pixels[(wbSource.PixelWidth - x - 1) + (wbSource.PixelHeight - y - 1) * wbSource.PixelWidth] = wbSource.Pixels[x + y * wbSource.PixelWidth];
                    break;
                case 270:
                    wbTarget.Pixels[y + (wbSource.PixelWidth - x - 1) * wbTarget.PixelWidth] = wbSource.Pixels[x + y * wbSource.PixelWidth];
                    break;
            }
        }
    }
    MemoryStream targetStream = new MemoryStream();
    wbTarget.SaveJpeg(targetStream, wbTarget.PixelWidth, wbTarget.PixelHeight, 0, 100);
    return targetStream;
}

    金山手機(jī)助手
    (130)金山手機(jī)助手
    金山手機(jī)助手是智能手機(jī)的資源獲取平臺(tái)。金山手機(jī)控幫助手機(jī)使用者用最省流量最快捷最方便最安全的方式獲取網(wǎng)絡(luò)資源,只需通過數(shù)據(jù)線的方式將手機(jī)連接至,便可以通過金山手機(jī)助手下載海量應(yīng)用,電子書視頻音樂圖片應(yīng)有盡有,游戲應(yīng)用軟件一應(yīng)俱全。還可以通過它進(jìn)行應(yīng)用管理任務(wù)管理,圖片視頻音樂等導(dǎo)入導(dǎo)出等等。功能特色金山手機(jī)控除了自有軟件游戲?qū)殠欤提供超過萬款手機(jī)資源,不花手機(jī)流量,一鍵下載安裝。金山手機(jī)控提供的...更多>>
    91手機(jī)助手
    (17)91手機(jī)助手
    手機(jī)助手擁有無比強(qiáng)大的功能,可以方便快捷的管理和安裝手機(jī)應(yīng)用,清理無效文件,備份通訊錄,收發(fā)短信等。使用助手安卓版,通過電腦即可輕松管理智能手機(jī),下載海量的手機(jī)游戲手機(jī)軟件手機(jī)音樂手機(jī)鈴聲手機(jī)壁紙手機(jī)主題手機(jī)電影等各種手機(jī)應(yīng)用,大大節(jié)省手機(jī)流量。...更多>>
    • 華為手機(jī)助手(HiSuite)V5.0.1.301

      01-12 / 31.5M

      推薦理由:華為手機(jī)助手式華為為其旗下智能手機(jī)推出的一款手機(jī)管理工具,可以幫助華為手機(jī)用戶進(jìn)行管理手機(jī)數(shù)據(jù)聯(lián)系人
    • iOS/Android自動(dòng)化測試工具(iTesti

      07-13 / 136.8M

      推薦理由:iTestin云測試工具是免費(fèi)為移動(dòng)應(yīng)用開發(fā)者提供自動(dòng)化測試的工具。它覆蓋Android和iOS兩大設(shè)備平臺(tái),為移動(dòng)應(yīng)
    • 線刷寶線刷工具V1.4.9 Build 149 官

      01-16 / 188M

      推薦理由:線刷寶是一款安卓手機(jī)智能線刷工具,如果你的手機(jī)因?yàn)樗C(jī)失敗導(dǎo)致無法正常使用的時(shí)候,線刷寶就是你的最佳
    • 奇兔刷機(jī)V7.2.1.0 官方最新版

      02-12 / 22.3M

      推薦理由:奇兔刷機(jī)是一款安卓手機(jī)刷機(jī)工具,實(shí)現(xiàn)真正一鍵式操作體驗(yàn),指導(dǎo)用戶快速完成刷機(jī)。海量高品質(zhì)ROM資源,輕松
    • 91手機(jī)助手電腦版V6.0.3.366 官方版

      01-22 / 26.4M

      推薦理由:91助手PC端V6版震撼推出啦!91助手V5版本是一款通過電腦管理iPhone、iPad、AndroidPhone、AndroidPad等多種
    • 91手機(jī)助手 for iPhone/iPad 電腦版

      11-04 / 26.1M

      推薦理由:91手機(jī)助手是由網(wǎng)龍公司推出的智能手機(jī)PC端管理工具,全面支持iPhone/WindowsMobile/Symbians60/Android的手

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過審核才能顯示)