2017-01-12 1 views
0

당신이 나를 도울 수 있기를 바랍니다. 내 캔버스에 포인트를 그리기 위해 WriteableBitmap 클래스를 사용하려고하지만 비슷한 문제를 한 번 보았지만 실행 중에는 아무 것도 나타나지 않지만 아무 것도 작동하지 않는 것 같습니다. 여기 내 코드가있다.WriteableBitmap을 사용하여 캔버스에 그리기, C# WPF

<Window x:Class="DASP_WorkstationWPF.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:DASP_WorkstationWPF" 
    mc:Ignorable="d" 
    Title="" Height="900" Width="1440" Background="PaleGoldenrod" > 

<Canvas> 
    <Canvas.Background> 
     <SolidColorBrush Color="Black" Opacity="0"/> 
    </Canvas.Background> 

    <Label x:Name="labela" Content="Amplitude" Canvas.Left="70" Canvas.Top="60"/> 
    <Label x:Name="labelf" Content="Frequency" Canvas.Left="70" Canvas.Top="90"/> 
    <Label x:Name="labelp" Content="Phase" Canvas.Left="70" Canvas.Top="120"/> 

    <Label x:Name="label0" Content="Sine Wave 1" Canvas.Left="170" Canvas.Top="36"/> 
    <TextBox x:Name="amplitude0" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="160" Canvas.Top="64" /> 
    <TextBox x:Name="frequency0" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="160" Canvas.Top="94" /> 
    <TextBox x:Name="phase0" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="160" Canvas.Top="124" /> 

    <Label x:Name="label1" Content="Sine Wave 2" Canvas.Left="290" Canvas.Top="36"/> 
    <TextBox x:Name="amplitude1" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="280" Canvas.Top="64" /> 
    <TextBox x:Name="frequency1" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="280" Canvas.Top="94" /> 
    <TextBox x:Name="phase1" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="280" Canvas.Top="124" /> 

    <Label x:Name="label2" Content="Sine Wave 3" Canvas.Left="410" Canvas.Top="36"/> 
    <TextBox x:Name="amplitude2" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="400" Canvas.Top="64" /> 
    <TextBox x:Name="frequency2" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="400" Canvas.Top="94" /> 
    <TextBox x:Name="phase2" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="400" Canvas.Top="124" /> 

    <Label x:Name="label3" Content="Sine Wave 4" Canvas.Left="530" Canvas.Top="36"/> 
    <TextBox x:Name="amplitude3" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="520" Canvas.Top="64" /> 
    <TextBox x:Name="frequency3" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="520" Canvas.Top="94" /> 
    <TextBox x:Name="phase3" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="520" Canvas.Top="124" /> 

    <Label x:Name="label4" Content="Sine Wave 5" Canvas.Left="650" Canvas.Top="36"/> 
    <TextBox x:Name="amplitude4" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="640" Canvas.Top="64" /> 
    <TextBox x:Name="frequency4" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="640" Canvas.Top="94" /> 
    <TextBox x:Name="phase4" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="640" Canvas.Top="124" /> 

    <Label x:Name="label5" Content="Sine Wave 6" Canvas.Left="770" Canvas.Top="36"/> 
    <TextBox x:Name="amplitude5" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="760" Canvas.Top="64" /> 
    <TextBox x:Name="frequency5" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="760" Canvas.Top="94" /> 
    <TextBox x:Name="phase5" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="760" Canvas.Top="124" /> 

    <Label x:Name="label6" Content="Sine Wave 7" Canvas.Left="890" Canvas.Top="36"/> 
    <TextBox x:Name="amplitude6" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="880" Canvas.Top="64" /> 
    <TextBox x:Name="frequency6" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="880" Canvas.Top="94" /> 
    <TextBox x:Name="phase6" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="880" Canvas.Top="124" /> 


    <Label x:Name="label7" Content="Sine Wave 8" Canvas.Left="1010" Canvas.Top="36"/> 
    <TextBox x:Name="amplitude7" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="1000" Canvas.Top="64" /> 
    <TextBox x:Name="frequency7" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="1000" Canvas.Top="94" /> 
    <TextBox x:Name="phase7" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="1000" Canvas.Top="124" /> 

    <Label x:Name="label8" Content="Sine Wave 9" Canvas.Left="1130" Canvas.Top="36"/> 
    <TextBox x:Name="amplitude8" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="1120" Canvas.Top="64" /> 
    <TextBox x:Name="frequency8" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="1120" Canvas.Top="94" /> 
    <TextBox x:Name="phase8" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="1120" Canvas.Top="124" /> 

    <Label x:Name="label9" Content="Sine Wave 10" Canvas.Left="1250" Canvas.Top="36"/> 
    <TextBox x:Name="amplitude9" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="1240" Canvas.Top="64" /> 
    <TextBox x:Name="frequency9" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="1240" Canvas.Top="94" /> 
    <TextBox x:Name="phase9" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" VerticalAlignment="Top" Width="100" Canvas.Left="1240" Canvas.Top="124" /> 

    <Button x:Name="plot" Content="Plot Signal" Canvas.Left="160" Canvas.Top="185" Width="134" Height="26" Click="plot_Click"/> 
    <Button x:Name="save" Content="Save Preset" Canvas.Left="330" Canvas.Top="185" Width="134" Height="26"/> 
    <Label x:Name="label10" Content="Preset Signals" Canvas.Left="600" Canvas.Top="185"/> 
    <ComboBox x:Name="defaults" Canvas.Left="699" Canvas.Top="185" Width="188" Height="26"/> 
    <Label x:Name="label11" Content="Sampling Rate" Canvas.Left="1050" Canvas.Top="185"/> 
    <ComboBox x:Name="samplingRate" SelectedIndex="1" Canvas.Left="1152" Canvas.Top="185" Width="188" Height="26" SelectionChanged="samplingRate_SelectionChanged"> 
     <ComboBoxItem Content="44.1kHz" HorizontalAlignment="Left" Width="186"/> 
     <ComboBoxItem Content="48kHz" HorizontalAlignment="Left" Width="186"/> 
     <ComboBoxItem Content="96kHz" HorizontalAlignment="Left" Width="186"/> 
     <ComboBoxItem Content="192kHz" HorizontalAlignment="Left" Width="186"/> 
    </ComboBox> 

    <Rectangle Fill="#F0F8FF" Height="200" Canvas.Left="70" Stroke="Black" Canvas.Top="240" Width="1270"/> 


    <Rectangle Fill="#F0F8FF" Height="200" Canvas.Left="70" Stroke="Black" Canvas.Top="600" Width="1270"/> 
</Canvas> 

... 및 C# 1 연료 소모량;

void plotSignal() 
    { 
     WriteableBitmap writeableBmp = BitmapFactory.New(240, 1270); 
     using (writeableBmp.GetBitmapContext()) 
     { 
      //writeableBmp.SetPixel(10, 13, Colors.Black); 
      writeableBmp.DrawLine(1, 2, 200, 400, Colors.Black); 
     } 
    } 

아이디어의 존재 그러나 나는 아무것도 내 캔버스의 아무 곳이나 그릴 얻을 수없는 순간에 XAML의 아래쪽에있는 사각형의 writeableBmp.SetPixel와 신호를 그릴 것입니다. 당신이 생각했던하지만이 올바른 방향으로 절 지적 아마 정확히 무엇을 미리

+1

WriteableBitmap 원 못생긴하지만 눈에 보이는 라인 마술처럼 캔버스에 나타납니다. Canvas에 Image 컨트롤을 추가 한 다음, writeableBmp를 Image 컨트롤의 Source 속성에 할당합니다. – Clemens

+0

그림 그리기 우리는 일반적으로 잉크가 아닌 비트 맵을 사용합니다. – MikeT

+0

@MikeT 잉크가 필요한 이유는 무엇입니까? 그건 말이 안돼. "캔버스에 선 그리기"에서는 캔버스에 선 컨트롤을 배치합니다. – Clemens

답변

0

감사 클레멘스의

덕분에, - 캔버스

<Canvas Name="mainCanvas"> 

에 이름을 추가하고 기능을 편집 .. .

void plotSignal() 
    { 
     // http://writeablebitmapex.codeplex.com/ 
     WriteableBitmap writeableBmp = BitmapFactory.New(240, 1270); 
     using (writeableBmp.GetBitmapContext()) 
     { 
      //writeableBmp.SetPixel(10, 13, Colors.Black); 
      writeableBmp.DrawLine(1, 2, 200, 400, Colors.Black); 
      Image waveform = new Image(); 
      waveform.Source = writeableBmp; 
      mainCanvas.Children.Add(waveform); 
     } 
    } 

결과는 '