乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      WinForm控件與WPF控件的交互

       louisasea 2007-11-21
       WinForm控件與WPF控件的交互     CSDN blog推出文章指數(shù)概念,文章指數(shù)是對blog文章綜合評分后推算出的,綜合評分項分別是該文章的點(diǎn)擊量,回復(fù)次數(shù),被網(wǎng)摘收錄數(shù)量,文章長度和文章類型;滿分100,每月更新一次。

      這個問題其實也可以理解為:怎樣在WPF/XAML中使用Winform中的控件(如PictureBox)?
      首先看看XAML代碼:(注意下面加粗的部分)
      <Window x:Class="WindowsApplication1.Window1"
          xmlns="    xmlns:x="    Title="WinForm控件與WPF控件的交互" Height="400" Width="600"
              xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
          >
        <StackPanel>
          <Grid>
            <Grid.ColumnDefinitions>
              <ColumnDefinition/>
              <ColumnDefinition/>
            </Grid.ColumnDefinitions>
            <Image Source="Girl.jpg" MaxHeight="300"  Grid.Column="0" Name="WPFImage"/>
            <WindowsFormsHost Grid.Column="1" MaxHeight="300" Name="pictureHost" >
              <wf:PictureBox />
            </WindowsFormsHost>
          </Grid>
        </StackPanel>
      </Window>
      C#代碼:
             System.Windows.Forms.PictureBox _pictureBox = null;
              void Window1_Loaded(object sender, RoutedEventArgs e)
              {
                  _pictureBox = pictureHost.Child as System.Windows.Forms.PictureBox;
                  _pictureBox.Image = GetBitmap(WPFImage);
              }

              #region Image Functions
              // 以下代碼實現(xiàn)了兩者WPF與GDI+的交互
              public void ConvertToGrayscale(System.Drawing.Bitmap source , int sliderVal)
              {
                  System.Drawing.Bitmap bm = new System.Drawing.Bitmap(source.Width, source.Height);
                  //下面代碼還可以使用不安全代碼,以提高效率
                  for (int y = 0; y < bm.Height; y++)
                  {
                      for (int x = 0; x < bm.Width; x++)
                      {
                          System.Drawing.Color c = source.GetPixel(x, y);
                          int luma = (int)(c.R * ((double)sliderVal / (double)10) * 0.3 + c.G * ((double)sliderVal / (double)10) * 0.59 + c.B * ((double)sliderVal / (double)10) * 0.11);
                          bm.SetPixel(x, y, System.Drawing.Color.FromArgb(luma, luma, luma));
                      }
                  }
                  _pictureBox.Image = bm;
              }

              System.Drawing.Bitmap AdjustBrightnessMatrix(System.Drawing.Bitmap img, int value)
              {
                  if (value == 0) // No change, so just return
                      return img;

                  float sb = (float)value / 255F;
                  float[][] colorMatrixElements =
                                 {
                                       new float[] {1,  0,  0,  0, 0},
                                       new float[] {0,  1,  0,  0, 0},
                                       new float[] {0,  0,  1,  0, 0},
                                       new float[] {0,  0,  0,  1, 0},
                                       new float[] {sb, sb, sb, 1, 1}
                                 };

                  System.Drawing.Imaging.ColorMatrix cm = new System.Drawing.Imaging.ColorMatrix(colorMatrixElements);
                  System.Drawing.Imaging.ImageAttributes imgattr = new System.Drawing.Imaging.ImageAttributes();
                  System.Drawing.Rectangle rc = new System.Drawing.Rectangle(0, 0, img.Width, img.Height);
                  System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(img);
                  g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                  imgattr.SetColorMatrix(cm);
                  g.DrawImage(img, rc, 0, 0, img.Width, img.Height, System.Drawing.GraphicsUnit.Pixel, imgattr);

                  imgattr.Dispose();
                  g.Dispose();
                  return img;
              }
              #endregion Image Functions

              #region Image-Bitmap Interop Helpers
              private void convertBitmapToBitmapSource(System.Drawing.Bitmap bitmap)
              {
                  using (bitmap)
                  {
                      System.Windows.Media.Imaging.BitmapSource bitmapSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                          bitmap.GetHbitmap(),
                          IntPtr.Zero,
                          Int32Rect.Empty,
                          System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());

                      WPFImage.Source = bitmapSource;
                  }
              }

              private System.Drawing.Bitmap GetBitmap(Image image)
              {
                  System.Windows.Forms.PictureBox picture = _pictureBox;
                      // Stream stm = File.Open("Waterfall.jpg", FileMode.Open, FileAccess.Read))
                      //// Since we‘re not specifying a System.Windows.Media.Imaging.BitmapCacheOption, the pixel format
                      //// will be System.Windows.Media.PixelFormats.Pbgra32.
                      // System.Windows.Media.Imaging.BitmapSource bitmapSource = System.Windows.Media.Imaging.BitmapFrame.Create(
                      //    stm,
                      //    System.Windows.Media.Imaging.BitmapCreateOptions.None,
                      //    System.Windows.Media.Imaging.BitmapCacheOption.OnLoad);

                      System.Windows.Media.Imaging.BitmapSource bitmapSource = WPFImage.Source as BitmapSource;

                      // Scale the image so that it will display similarly to the WPF Image.
                      double newWidthRatio = picture.Width / (double)bitmapSource.PixelWidth;
                      double newHeightRatio = ((picture.Width * bitmapSource.PixelHeight) / (double)bitmapSource.PixelWidth) / (double)bitmapSource.PixelHeight;

                      System.Windows.Media.Imaging.BitmapSource transformedBitmapSource = new System.Windows.Media.Imaging.TransformedBitmap(
                          bitmapSource,
                          new System.Windows.Media.ScaleTransform(newWidthRatio, newHeightRatio));

                      int width = transformedBitmapSource.PixelWidth;
                      int height = transformedBitmapSource.PixelHeight;
                      int stride = width * ((transformedBitmapSource.Format.BitsPerPixel + 7) / 8);

                      byte[] bits = new byte[height * stride];

                      transformedBitmapSource.CopyPixels(bits, stride, 0);

                      unsafe
                      {
                          fixed (byte* pBits = bits)
                          {
                              IntPtr ptr = new IntPtr(pBits);

                              System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(
                                  width,
                                  height,
                                  stride,
                                  System.Drawing.Imaging.PixelFormat.Format32bppPArgb,
                                  ptr);

                              return bitmap;
                          }
                      }
                  }
              #endregion Image-Bitmap Interop Helpers 
      想像一下,通過相互轉(zhuǎn)換、相互調(diào)用,可以很方便地實現(xiàn)一些功能(彼此功能互補(bǔ)嘛)。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約