2016-09-02 6 views
0

コンソールC#アプリケーションでSetDeviceGammaRamp APIを使用しましたが、うまくいきました。しかし、同じものがユニバーサルWindowsアプリケーションのエラーで使用されたときには、「CS1620引数2に 'ref'キーワードが渡されなければなりません」というメッセージが表示されます。SetDeviceGammaRampユニバーサルウィンドウアプリケーションでのAPI使用

私の要件は、スライダコントロールを使用してガンマ値を変更することです。

コードエリア:

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Runtime.InteropServices.WindowsRuntime; 
using Windows.Foundation; 
using Windows.Foundation.Collections; 
using Windows.UI.Xaml; 
using Windows.UI.Xaml.Controls; 
using Windows.UI.Xaml.Controls.Primitives; 
using Windows.UI.Xaml.Data; 
using Windows.UI.Xaml.Input; 
using Windows.UI.Xaml.Media; 
using Windows.UI.Xaml.Navigation; 
using System.Runtime.InteropServices; 

// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 

namespace Brightness 
{ 
     /// <summary> 
     /// An empty page that can be used on its own or navigated to within a Frame. 
     /// </summary> 
     public sealed partial class MainPage : Page 
     { 
      [DllImport("user32.dll")] 
      public static extern IntPtr GetDC(IntPtr hWnd); 

      [DllImport("gdi32.dll")] 
      public static extern bool SetDeviceGammaRamp(IntPtr hDC, ref RAMP lpRamp); 

      [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] 
      public struct RAMP 
      { 
       [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] 
       public UInt16[] Red; 
       [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] 
       public UInt16[] Green; 
       [MarshalAs(UnmanagedType.ByValArray, SizeConst = 256)] 
       public UInt16[] Blue; 
      } 

      public MainPage() 
      { 
       this.InitializeComponent(); 
      } 

      public static void SetGamma(int gamma) 
      { 
       if (gamma <= 256 && gamma >= 1) 
       { 
        RAMP ramp = new RAMP(); 
        ramp.Red = new ushort[256]; 
        ramp.Green = new ushort[256]; 
        ramp.Blue = new ushort[256]; 
        for (int i = 1; i < 256; i++) 
        { 
          int iArrayValue = i * (gamma + 128); 

          if (iArrayValue > 65535) 
          { 
           iArrayValue = 65535; 
          } 
          ramp.Red[i] = ramp.Blue[i] = ramp.Green[i] = (ushort)iArrayValue; 
        } 
        SetDeviceGammaRamp(GetDC(IntPtr.Zero), ref ramp); 
       } 
      } 


      private void Slider_ValueChanged(object sender,                 RangeBaseValueChangedEventArgs e) 
      { 
        Slider slider = sender as Slider; 
        if (slider != null) 
        { 
         int p = (int)slider.Value; 
         SetGamma(p); 
        } 
       } 
     } 
    } 

enter code here 

エラー:CS1620:引数2 '参照' キーワード

に渡さなければならない私は、C#とユニバーサルのWindowsアプリケーションに新しいです。 助けてください。

+0

UWPアプリケーションでは使用できない多数の従来のwinapi関数があります。 user32.dllとgdi32.dllからのものはすべて無効です。 SetDeviceGammaRamp()の代替手段はありません。 –

答えて

0

スライダを使用してガンマ値を変更することはできません。スライダを変更しようとすると自動的にスライドするためです。アプリケーションはスライド条件の値を参照することはできません。スライドの問題を最初に修正してください。次に、注入方法を使用してガンマ値を変更することができます。

+0

ガンマ値を変更する注入方法とは何ですか?参考資料はありますか?ユニバーサルWindowsアプリケーションで可能ですか? – syam218

関連する問題