zoukankan      html  css  js  c++  java
  • Windows Phone 8.1 多媒体(1):相片

    Windows Phone 8.1 多媒体(1):相片

    Windows Phone 8.1 多媒体(2):视频

    Windows Phone 8.1 多媒体(3):音乐


    (1)拍摄相片

    1)CaptureElement

    CaptureElement 是放在应用界面上预览拍照的控件:

    <Grid>
        <CaptureElement x:Name="capturePhotoElement"/>
    </Grid>
    
    <Page.BottomAppBar>
        <CommandBar>
            <AppBarButton x:Name="btnCapturePhoto"
                          Icon="Camera" Label="Capture"
                          Click="btnCapturePhoto_Click"/>
        </CommandBar>
    </Page.BottomAppBar>

     

    2)MediaCapture

    MediaCapture 是控制拍摄的重要类。

    首先初始化 MediaCapture,并将 CaptureElement 的 Source 设为 该 MediaCapture:

    MediaCapture photoCapture;
    ImageEncodingProperties imgEncodingProperties;
    
    protected override async void OnNavigatedTo(NavigationEventArgs e)
    {
        capturePhotoElement.Source = await Initialize();
    
        await photoCapture.StartPreviewAsync();
    }
    
    private async Task<MediaCapture> Initialize()
    {
        photoCapture = new MediaCapture();
        await photoCapture.InitializeAsync();
    
        photoCapture.VideoDeviceController.PrimaryUse = CaptureUse.Photo;
    
        imgEncodingProperties = ImageEncodingProperties.CreateJpeg();
        imgEncodingProperties.Width = 640;
        imgEncodingProperties.Height = 480;
    
        return photoCapture;
    }

    然后在按下某个按钮的时候完成拍摄:

    private async void btnCapturePhoto_Click(object sender, RoutedEventArgs e)
    {
        var photo = await KnownFolders.PicturesLibrary.CreateFileAsync("photo.jpg", CreationCollisionOption.GenerateUniqueName);
    
        await photoCapture.CapturePhotoToStorageFileAsync(imgEncodingProperties, photo);
    }

    也可以添加手机实体按键的事件:

    HardwareButtons.CameraHalfPressed += HardwareButtons_CameraHalfPressed;
    
    async void HardwareButtons_CameraHalfPressed(object sender, CameraEventArgs e)
    {
        await photoCapture.VideoDeviceController.FocusControl.FocusAsync();
    }

    最后记得在离开页面时释放 MediaCapture 资源:

    protected override void OnNavigatedFrom(NavigationEventArgs e)
    {
        if( photoCapture != null )
        {
            photoCapture.Dispose();
            photoCapture = null;
        }
    }

    (2)编辑相片

    我在这里使用了 Nokia Imaging SDK 和 WritableBitmapEx 库,可在 Nuget 中搜索并安装。

    注意要将配置管理器中的 CPU 改成 ARM,否则 Nokia Imaging SDK 将不可用。

    使用方法非常简单,比如以下为一张图片添加滤镜:

    WriteableBitmap originBitmap;
    WriteableBitmap editedBitmap;
    
    private async void editButton_Click(object sender, RoutedEventArgs e)
    {
        var imageSource = new BitmapImageSource(originBitmap.AsBitmap());
    
        using( var effect = new FilterEffect(imageSource) )
        {
            var filter = new AntiqueFilter();
    
            effect.Filters = new[] { filter };
    
            var renderer = new WriteableBitmapRenderer(effect, originBitmap);
            editedBitmap = await renderer.RenderAsync();
    
            editedBitmap.Invalidate();
        }
    
        myImage.Source = editedBitmap;
    }

    更多的使用方法可到诺基亚帮助中心查看:链接

  • 相关阅读:
    SQL事务
    C# 怎样读写EXCEL文件
    如何#读写EXCEL 文件 (http://space.cnblogs.com/question/7131/)
    C# 怎样读写EXCEL文件 (http://space.cnblogs.com/question/7131/)
    控制DataGirdView中單元格
    C#中ToString格式大全
    转贴:用SqlCommandBuilder 实现批量更新
    错题记录1
    Java—关于String的分析
    Java模拟双色球彩票
  • 原文地址:https://www.cnblogs.com/xiaoshi3003/p/3784030.html
Copyright © 2011-2022 走看看