2014-03-03 2 views
0

안녕하세요 여러분, 왜 이미지가 올바르게 렌더링되지 않는지 이해할 수 없습니다. 다음은 XAML :writablebitmap 렌더링 나쁜 이미지

enter image description here enter image description here

이유 : 내가 여기에 이미지

private async void FilterPage_Loaded(object sender, RoutedEventArgs e) 
{ 
    System.Windows.Size screenSize = ResolutionHelper.ScreenResolution; 

    Windows.Foundation.Size photoSize = await GetImageSizeAsync(); 

    double scale = 1; 

    if (this.Orientation == PageOrientation.PortraitUp) 
    { 
     if (photoSize.Width > photoSize.Height) 
     { 
      scale = screenSize.Width/photoSize.Width; 
     } 
     else 
     { 
      scale = screenSize.Height/photoSize.Height; 
     } 
    } 

    this._dimensionsPhoto.Width = (photoSize.Width * scale) - 6; 
    this._dimensionsPhoto.Height = (photoSize.Height * scale) - 6; 

    //this.ImgChosenPhoto.Height = (int)this._dimensionsPhoto.Height; 
    //this.ImgChosenPhoto.Width = (int)this._dimensionsPhoto.Width; 


    WriteableBitmap writeableBitmap = new WriteableBitmap((int)this._dimensionsPhoto.Height, (int)this._dimensionsPhoto.Width); 

    await App.PhotoModel.RenderBitmapAsync(writeableBitmap); 

    this.ImgChosenPhoto.Source = writeableBitmap; 
} 

public async Task RenderBitmapAsync(WriteableBitmap bitmap) 
{ 
    using (BufferImageSource source = new BufferImageSource(_buffer)) 
    using (FilterEffect effect = new FilterEffect(source) { Filters = this._components }) 
    using (WriteableBitmapRenderer renderer = new WriteableBitmapRenderer(effect, bitmap)) 
    { 
     await renderer.RenderAsync(); 

     bitmap.Invalidate(); 
    } 
} 

결과를 렌더링 방법은 다음과

<Canvas x:Name="CanvasLayout" Grid.Row="0" Grid.Column="0" 
      VerticalAlignment="Center" Width="{Binding ActualWidth, ElementName=LayoutRoot, Mode=OneWay}" 
      Height="{Binding ActualHeight, ElementName=LayoutRoot, Mode=OneWay}"> 
    <Border Background="Red" BorderBrush="Yellow" BorderThickness="3" Margin="0" > 
     <Image x:Name="ImgChosenPhoto" Stretch="UniformToFill" Canvas.ZIndex="1" /> 
    </Border> 
</Canvas> 

(스크린 샷은 내 루미아 925을 형성)? 어떤 여백도 설정하지 않았습니다 ... 아무 것도 ...

처음에는 이미지가 오른쪽으로 렌더링된다는 것을 알 수 있습니다 ... 노란색 테두리를 볼 수 없으므로 이미지 컨트롤 오버플로와 같습니다. 화면 ... 오른쪽 테두리가 50 픽셀에 대해 그리워 .. 화면의 끝 부분에없는 두 번째에서 ... 당신의 도움을

고맙습니다 ...

+0

원하는 결과는 무엇입니까? 첫 번째 스크린 샷과 두 번째 스크린 샷의 코드 차이점은 무엇입니까? –

+0

안녕하세요 ... 첫 번째 스크린 샷은 세로 이미지입니다 ... 두 번째 이미지는 가로 이미지입니다 ... 결과는 화면의 이미지 크기를 조정하면서 이미지를 렌더링하려는 것입니다. 이미지의 크기가 조정되지만 이미지 컨트롤처럼 보이지 않습니다! (이미지 컨트롤은 ywllow 테두리가있는 빨간색 직사각형입니다.) 왜 그 크기인지 이해하지 못합니다! – Ciccio

+2

캔버스 대신 그리드에 배치하는 방법은 늘어납니다. –

답변

0

이 시도 :

<Grid x:Name="LayoutRoot" Background="Transparent"> 
    <Grid x:Name="CanvasLayout" 
     VerticalAlignment="Center"> 
     <Border Background="Red" BorderBrush="Yellow" BorderThickness="3" Margin="0" > 
      <Image x:Name="ImgChosenPhoto" /> 
     </Border> 
    </Grid> 
</Grid> 

변경됨 Canvas이이미지의 StretchCanvas.ZIndex 속성을 모두 제거했습니다.

+0

캔버스없이 컨트롤을 서로 겹칠 수 있습니까? 아직 구현하지 못했지만 두 개 이상의 서로 다른 컨트롤을 겹쳐 야합니다 ... – Ciccio

+0

예. 가능합니다. 그리드에 배치하고 원하는대로 정렬하십시오. –