小编And*_*eas的帖子

DockableFloatingWindow上的Maximize和Aero snap

我有以下代码给一个未对接的浮动AvalonDock窗口最大化的能力:

class MaximizableDockableContent : AvalonDock.DockableContent
{
    public MaximizableDockableContent()
        : base()
    {
         base.StateChanged += MaximizableDockableContent_StateChanged;
    }

    private void MaximizableDockableContent_StateChanged(
        object sender, RoutedEventArgs e)
    {
        MaximizableDockableContent mdc = (MaximizableDockableContent)sender;
        if (mdc.State == DockableContentState.DockableWindow)
        {
            base.FloatingWindowSizeToContent = SizeToContent.WidthAndHeight;
            FloatingDockablePane fdp = (FloatingDockablePane)base.Parent;
            DockableFloatingWindow dfw = (DockableFloatingWindow)fdp.Parent;

            //dfw.WindowState = WindowState.Maximized;
            dfw.WindowStyle = WindowStyle.ThreeDBorderWindow;
            dfw.ResizeMode = ResizeMode.CanResize;

            //disable minimize button
            ControlBox.SetHasMinimizeButton(dfw, false);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如何为此添加Aero Snap功能?

wpf aero maximize avalondock

26
推荐指数
1
解决办法
1799
查看次数

如何在 WPF 图像中加载非常大的源图像?

我有一个非常大的图像 (600mb) 30000x30000,想将它加载到 wpf 图像控件中。

我可以使用 Windows 照片查看器观看此图像!

我将我的 testapp 设置为 64 位并使用以下代码。

var image = new BitmapImage();
image.BeginInit();

// load into memory and unlock file
image.CacheOption = BitmapCacheOption.OnLoad;

image.UriSource = uri;

image.EndInit();

imagecontrol.source = image;
Run Code Online (Sandbox Code Playgroud)

测试应用程序仅显示带有此大图像的白色屏幕。

100mb 和 7000x7000 等较小的文件正在工作。

我究竟做错了什么?Sry 我的英语不好,并提前致谢。

wpf load image view

5
推荐指数
1
解决办法
3659
查看次数

使用 Bitmiracle Libtiff.net 创建 Bigtiff (>4GB) 文件

首先,我要感谢 Bitmiracle 提供的这个伟大的库。即使创建非常大的文件,内存占用也非常低。几天前,我遇到了一个问题,我想创建一个大于 4GB 的 tiff 文件。我成功创建了平铺 tiff 文件,但创建的超过 4GB 的平铺文件的颜色似乎以某种方式反转了。

使用 vilv 查看器查看结果文件 这里是代码相关代码:

用法:

WriteTiledTiff("bigtiff.tiff",BitmapSourceFromBrush(new RadialGradientBrush(Colors.Aqua,Colors.Red), 256));
Run Code Online (Sandbox Code Playgroud)

方法:

public static BitmapSource BitmapSourceFromBrush(Brush drawingBrush, int size = 32, int dpi = 96)
    {
        // RenderTargetBitmap = builds a bitmap rendering of a visual
        var pixelFormat = PixelFormats.Pbgra32;
        RenderTargetBitmap rtb = new RenderTargetBitmap(size, size, dpi, dpi, pixelFormat);

        // Drawing visual allows us to compose graphic drawing parts into a visual to render
        var drawingVisual = new DrawingVisual();
        using (DrawingContext context = drawingVisual.RenderOpen())
        { …
Run Code Online (Sandbox Code Playgroud)

.net c# tiff imaging libtiff.net

5
推荐指数
1
解决办法
2707
查看次数

如何冻结无法冻结的freezable对象

在我的场景中,我想在我想在后台任务中渲染它之前冻结一个不变的BitmapCacheBrush.不幸的是我收到错误"这个Freezable不能被冻结".是否有任何解决方法或hacky方式冻结也不是freezable对象?也许可以通过反射设置正确的属性来达到这个目标?提前谢谢你们.

编辑:(我的示例代码请求)

 public static class ext
{
    public static async Task<BitmapSource> RenderAsync(this Visual visual)
    {
        var bounds = VisualTreeHelper.GetDescendantBounds(visual);

        var bitmapCacheBrush = new BitmapCacheBrush(visual);
        bitmapCacheBrush.BitmapCache = new BitmapCache();

        // We need to disconnect the visual here to make the freezable freezable :). Of course this will make our rendering blank
        //bitmapCacheBrush.Target = null;

        bitmapCacheBrush.Freeze();

        var bitmapSource = await Task.Run(() =>
        {
            var renderBitmap = new RenderTargetBitmap((int)bounds.Width,
                                                         (int)bounds.Height, 96, 96, PixelFormats.Pbgra32);

            var dVisual = new DrawingVisual();
            using (DrawingContext context = dVisual.RenderOpen()) …
Run Code Online (Sandbox Code Playgroud)

c# wpf multithreading freezable rendertargetbitmap

5
推荐指数
1
解决办法
3971
查看次数

如何使用图形对象渲染 WPF Hwnd

之后RenderTargetBitmap就太慢了。我尝试了一种不同的方法。不幸的是我的尝试没有成功。希望你们中的一些人能够弄清楚为什么这段代码不起作用。

  var myPopup = new Popup();
            var child = new Grid() { Background = new VisualBrush(myVisual)};
            myPopup.StaysOpen = false;
            myPopup.Child = child;
            myPopup.IsOpen = false;

            myPopup.Opened += (sender, args) =>
            {
                var source = ((HwndSource)PresentationSource.FromVisual(myPopup.Child));
                var image = new Bitmap(1000,1000);
                using (Graphics gr = Graphics.FromHwnd(source.Handle))
                {
                    var ptr = gr.GetHdc();

                    using (Graphics g = Graphics.FromHdc(ptr))
                    {
                        g.DrawImage(image, new System.Drawing.Point(0, 0));
                    }
                    gr.ReleaseHdc(ptr);
                }
                //The image is just black...
                image.Save("test.png");

                myPopup.IsOpen = false;
            };
            myPopup.IsOpen = true;
Run Code Online (Sandbox Code Playgroud)

c# wpf graphics render rendertargetbitmap

4
推荐指数
1
解决办法
2514
查看次数

WPF 3D光强度

我有一个带有AmbientLight的3D场景.我想添加第二个Light(SpotLight)来用红色照射一个区域.不幸的是,AmbientLight比Spotlight亮得多,所以它不可见.

有人有想法吗?

提前致谢.

3d wpf spotlight light brightness

3
推荐指数
1
解决办法
1218
查看次数

如何在WPF应用程序中检测“触摸按住”手势?

可以通过MouseRightButtonDown事件检测触摸并按住手势。不幸的是,直到我从屏幕上松开手指时,它才会触发。这来晚了!

有人有想法吗?提前致谢。

wpf touch gesture

1
推荐指数
1
解决办法
3801
查看次数

异步将WPF可视化呈现为位图

我看到WinRT RenderTargetBitmap能够通过"RenderAsync(visual);"异步呈现Visual.方法.不幸的是.net RendertargetBitmap 没有RenderAsync方法..net RenderTargetBitmap是否有任何变通方法或扩展,以允许WPF视觉效果的异步呈现?提前感谢您的帮助!

c# wpf asynchronous rendertargetbitmap async-await

1
推荐指数
1
解决办法
1169
查看次数