2011-07-07 30 views
10

Tôi đang sử dụng điều khiển PhotoCamera với các công cụ phát triển Windows Phone 7 Mango Beta 2.ViewFinder Định hướng Với Windows Phone 7 Mango PhotoCamera

Các "ngắm" cho sự kiểm soát máy ảnh là một đối tượng hình chữ nhật đầy với một VideoBrush, như trong ví dụ ở đây:

http://msdn.microsoft.com/en-us/library/hh202956%28v=VS.92%29.aspx

Vấn đề của tôi là khi tôi chạy ứng dụng trên điện thoại của tôi, Hình ảnh ViewFinder luôn hiển thị xoay 90 độ ngược chiều kim đồng hồ. Đây là trường hợp không có vấn đề làm thế nào điện thoại được định vị.

Có ai biết cách tôi có thể định hướng ViewFinder một cách chính xác không?

+2

bạn đã đặt SuppoertedOrientations = "PortraitOrLandscape" chưa? –

+0

Tôi đặt nó thành Portrait –

+0

Điều này có nghĩa là nó sẽ không tạo ra sự khác biệt nào nếu bạn đặt nó thành PortraitOrLandscape không? –

Trả lời

9

Vâng, định hướng là một cái gì đó bạn sẽ cần phải quản lý với một tương transform:

<!--Camera viewfinder >--> 
<Rectangle Grid.Row="1" 
      x:Name="preview"> 
    <Rectangle.Fill> 
    <VideoBrush x:Name="previewBrush"> 
     <VideoBrush.RelativeTransform> 
     <CompositeTransform x:Name="previewTransform" 
          CenterX=".5" 
          CenterY=".5" /> 
     </VideoBrush.RelativeTransform> 
    </VideoBrush> 
    </Rectangle.Fill> 
</Rectangle> 

Sau đó, bạn có thể sử dụng lớp Photocamera để xác định cách bạn muốn xoay nó:

double cameraRotation = theCamera.Orientation; 

// Use the orientation to determine how to transform 
// the camera preview 
previewTransform.Rotation = theCamera.Orientation + 90.0; // Landscape? 

HTH

+0

nhưng nó sẽ lấy hình ảnh 4: 3 và đổ nó để phù hợp với một khung 3: 4 làm cho hình ảnh bị méo ... – xster

2

Bạn không cần phải làm điều đó nhiều mã, giả sử bạn đang ở chế độ dọc, chỉ cần gọi:

viewfinderBrush.RelativeTransform 
    = new CompositeTransform() { CenterX = 0.5, CenterY = 0.5, Rotation = 90 }; 

Nhưng tất nhiên, bất kể định hướng nào bạn sử dụng cho kính ngắm, hình ảnh kết quả IS vẫn ở chế độ ngang! Có ai có một ý tưởng làm thế nào để sửa chữa tốt nhất này?

+0

Cảm ơn công trình này hoàn hảo.! – Nirus

4

Thêm giải thích rõ hơn cho câu trả lời: Một điều mà tài liệu mô tả không được đề cập ở đây là biến đổi tương đối được điều chỉnh trong sự kiện OnOrientationChanged. Một khác biệt khác là biến đổi tương đối không được chỉ định trong XAML.

Trong các tài liệu (How to: Create a Base Camera Application for Windows Phone), hình chữ nhật được làm đầy với các videobrush như sau:

<!--Camera viewfinder >--> 
<Rectangle Width="640" Height="480" 
      HorizontalAlignment="Left" 
      x:Name="viewfinderContainer"> 

    <Rectangle.Fill> 
     <VideoBrush x:Name="viewfinderBrush" /> 
    </Rectangle.Fill> 
</Rectangle> 

Sau đó, trong code-behind, sự kiện OnOrientationChanged quay hình chữ nhật dựa trên khuynh hướng:

// Ensure that the viewfinder is upright in LandscapeRight. 
    protected override void OnOrientationChanged(OrientationChangedEventArgs e) 
    { 
     if (e.Orientation == PageOrientation.LandscapeRight) 
     { 
      viewfinderBrush.RelativeTransform = 
       new CompositeTransform() { CenterX = 0.5, CenterY = 0.5, Rotation = 180 }; 
     } 
     else 
     { 
      viewfinderBrush.RelativeTransform = 
       new CompositeTransform() { CenterX = 0.5, CenterY = 0.5, Rotation = 0 }; 
     } 

     base.OnOrientationChanged(e); 
    } 

Mã trong chủ đề này (tương ứng với mẫu) được định cấu hình để chỉ sử dụng hướng ngang, có thể đây là lý do bạn chỉ nhận được hình ảnh ngang (?) Lúc đầu, các thuộc tính sau được thêm vào điện thoại: PhoneApplicationPage e lement trong MainPage.xaml:

SupportedOrientations="Landscape" Orientation="LandscapeLeft" 

Nếu bạn vẫn đang nhận được hình ảnh định hướng không đúng cách, đồng bộ hóa hình ảnh của bạn để máy tính của bạn và xem họ đang định hướng một cách chính xác trong khi xem chúng ở đó (trên máy tính của bạn). Nó có thể là một lỗi với bản Beta khiến cho hình ảnh không xuất hiện chính xác trên thiết bị.

Hy vọng điều đó sẽ hữu ích. Chúc mừng

0

có, tôi đã xóa OnOrientationChanged-Eventhandler và chỉ cần đặt biến đổi. Trong Xaml tất nhiên tôi đã thay đổi hướng để chân dung.

Bây giờ, khung ngắm hiển thị dọc và trang cũng là dọc.Nhưng hình ảnh được lưu dưới dạng hình thu nhỏ cho cuộn máy ảnh, vì vậy tôi có thể nhìn thấy trực tiếp trên thiết bị mà hình ảnh đã chụp vẫn có hướng ngang.

sẽ được mát mẻ, nếu ai đó có thể xác minh rằng đây là một lỗi Beta, hoặc nếu chúng ta vừa thực hiện một số mã ngu ngốc đây;)

Cảm ơn.