C# CaptureElement Windows应用商店应用程序中的焦点点

C# CaptureElement Windows应用商店应用程序中的焦点点,c#,.net,image,windows-store-apps,windows-8.1,C#,.net,Image,Windows Store Apps,Windows 8.1,我正在开发一个Windows应用商店应用程序,它可以使照片具有特定的格式和大小,并且可以存储。是否可以点击屏幕上的照片,了解焦点和白平衡在这一点上设置了什么。 为此,我使用CaptureElement,但无法设置焦点坐标 在Windows Phone中,这是可能的,请参见:PhotoCamera.FocusAtPoint。在“Windows应用商店应用程序.NET”Windows 8.1库中,我找不到此选项 有人能帮忙吗 致以最诚挚的问候您可以使用感兴趣的区域进行点击聚焦 以下是实施细节: 要

我正在开发一个Windows应用商店应用程序,它可以使照片具有特定的格式和大小,并且可以存储。是否可以点击屏幕上的照片,了解焦点和白平衡在这一点上设置了什么。 为此,我使用CaptureElement,但无法设置焦点坐标

在Windows Phone中,这是可能的,请参见:PhotoCamera.FocusAtPoint。在“Windows应用商店应用程序.NET”Windows 8.1库中,我找不到此选项

有人能帮忙吗


致以最诚挚的问候

您可以使用感兴趣的区域进行点击聚焦

以下是实施细节:

要从用户处获取触摸焦点的点击事件,您可以使用一个覆盖整个取景器的网格,使不透明度非常低,以便不可见:

<Grid x:Name="tapROIGrid" Tapped="tapROIGrid_Tapped" Background="White" Opacity="0.001"/>

在点击事件中,请注意,我在点击位置周围制作了一个50*50的UI像素作为感兴趣区域:

private async void tapROIGrid_Tapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e)
{
    if (media capture not initialized || focus not supported || roi auto focus not supported)
        return;


    VideoEncodingProperties properties = MediaCapture.VideoDeviceController.GetMediaStreamProperties(MediaStreamType.VideoPreview) as VideoEncodingProperties;
    uint CurrentViewFinderResWidth = properties.Width;
    uint CurrentViewFinderResHeight = properties.Height;

    _vfResToScreenFactor = ((double)CurrentViewFinderResHeight) / _tapROIGrid.ActualHeight;
    var pos = e.GetPosition(sender as UIElement);
    var point1 = new Point( (pos.X - 25) * _vfResToScreenFactor, (pos.Y - 25) * _vfResToScreenFactor);
    if (point1.X < 0)
        point1.X = 0;
    if (point1.Y < 0)
        point1.Y = 0;

    var point2 = new Point((pos.X + 25) * _vfResToScreenFactor, (pos.Y + 25) * _vfResToScreenFactor);
    if (point2.X > ((double)CurrentViewFinderResWidth))
        point2.X = ((double)CurrentViewFinderResWidth);
    if (point2.Y > ((double)CurrentViewFinderResHeight))
        point2.Y = ((double)CurrentViewFinderResHeight);

    var region = new RegionOfInterest();
    region.Bounds = new Rect(point1, point2);
    region.BoundsNormalized = false;
    region.AutoFocusEnabled = true;
    region.AutoExposureEnabled = true; //this will make exposure for roi
    region.AutoWhiteBalanceEnabled = true; //this will make wb for roi
    var List<RegionOfInterest> RoiRegions new List<RegionOfInterest>(1);
    RoiRegions.Add(region);

    await _app.VM.MediaCapture.VideoDeviceController.RegionsOfInterestControl.ClearRegionsAsync();
    await _app.VM.MediaCapture.VideoDeviceController.RegionsOfInterestControl.SetRegionsAsync(RoiRegions, true);

    //note: before focusing, make sure or set single focus mode. That part of code not here.
    await FocusAsync();
}
private async void tapROIGrid\u Tapped(对象发送方,Windows.UI.Xaml.Input.TappedRoutedEventArgs e)
{
if(媒体捕获未初始化| |不支持聚焦| |不支持roi自动聚焦)
返回;
VideoEncodingProperties=MediaCapture.VideoDeviceController.GetMediaStreamProperties(MediaStreamType.VideoPreview)作为VideoEncodingProperties;
uint CurrentViewFinderResWidth=properties.Width;
uint CurrentViewFinderResHeight=properties.Height;
_vfResToScreenFactor=((双精度)CurrentViewFinderResHeight)/_tapROIGrid.ActualHeight;
var pos=e.GetPosition(发送方作为UIElement);
var point1=新点((位置X-25)*_vfResToScreenFactor,(位置Y-25)*_vfResToScreenFactor);
如果(点1.X<0)
点1.X=0;
如果(点1.Y<0)
点1.Y=0;
var point2=新点((位置X+25)*_vfResToScreenFactor,(位置Y+25)*_vfResToScreenFactor);
如果(point2.X>((双精度)CurrentViewFinderResWidth))
point2.X=((双精度)CurrentViewFinderResWidth);
如果(point2.Y>((双)CurrentViewFinderResHeight))
点2.Y=((双精度)CurrentViewFinderResHeight);
var region=新RegionFinTerest();
region.Bounds=new Rect(点1,点2);
region.BoundsNormalized=false;
region.AutoFocusEnabled=true;
region.AutoExposureEnabled=true;//这将对roi进行曝光
region.AutoWhiteBalanceEnabled=true;//这将使wb成为roi
var列表和新列表(1);
区域。添加(区域);
等待app.VM.MediaCapture.VideoDeviceController.RegionsOfInterestControl.ClearRegionAsync();
wait_app.VM.MediaCapture.VideoDeviceController.RegionsOfInterestControl.SetRegionAsync(RoiRegions,true);
//注意:对焦前,请确保或设置单对焦模式。这部分代码不在这里。
等待焦点同步();
}