【问题标题】:Generate Image as byte[] in WinRT with SharpDX使用 SharpDX 在 WinRT 中将图像生成为字节 []
【发布时间】:2012-11-09 18:57:39
【问题描述】:

我正在尝试生成一个简单的图像并在 WinRT/XAML 中显示它。 为此,我想要使用 SharpDX 绘制的图像的字节 []。 到目前为止,我的方法看起来不错,但结果缓冲区是空的。

我也尝试了 CopyPixels,但它也只产生零。

有人能指出正确的方向吗?


    private static byte[] Draw(TexRenderer trnder, int width, int height)
    {
        var wicFactory = new ImagingFactory();
        var dddFactory = new SharpDX.Direct2D1.Factory();
        var dwFactory = new SharpDX.DirectWrite.Factory();

        var wicBitmap = new Bitmap(
            wicFactory,
            width,
            height,
            SharpDX.WIC.PixelFormat.Format32bppBGR,
            BitmapCreateCacheOption.CacheOnLoad);


        var renderTargetProperties = new RenderTargetProperties(
            RenderTargetType.Default,
            new SharpDX.Direct2D1.PixelFormat(Format.Unknown, AlphaMode.Unknown),
            dddFactory.DesktopDpi.Width,
            dddFactory.DesktopDpi.Height,
            RenderTargetUsage.None,
            FeatureLevel.Level_DEFAULT);
        var renderTarget = new WicRenderTarget(
            dddFactory,
            wicBitmap,
            renderTargetProperties)
            {
                TextAntialiasMode = TextAntialiasMode.Cleartype
            };

        renderTarget.BeginDraw();

        var textFormat = new TextFormat(dwFactory, "Consolas", 48)
            {
                TextAlignment = TextAlignment.Center,
                ParagraphAlignment = ParagraphAlignment.Center
            };
        var textBrush = new SolidColorBrush(
            renderTarget,
            Color.Blue);

        renderTarget.Clear(Color.White);
        renderTarget.DrawText(
            "Hi, mom!",
            textFormat,
            new RectangleF(0, 0, width, height),
            textBrush);
        var bitmapRenderTarget = new BitmapRenderTarget(renderTarget, CompatibleRenderTargetOptions.None);
        trnder.Render(bitmapRenderTarget, 0, 0);

        renderTarget.EndDraw();

        var bitmaplock = wicBitmap.Lock(null, BitmapLockFlags.Read);
        var dStream = new DataStream(bitmaplock.Data.DataPointer, bitmaplock.Stride * bitmaplock.Size.Height, true, true);
        var buffer = new byte[bitmaplock.Stride * bitmaplock.Size.Height];
        dStream.Write(buffer, 0, buffer.Length);

        return buffer;
    }

【问题讨论】:

  • WPF 不是 WINRT。 WPF 是.Net。 WINRT 不是 .Net。
  • 我想他的意思是 WinRT/XAML - Jupiter
  • 啊,当然,更正了。

标签: xaml windows-runtime sharpdx


【解决方案1】:

我遇到了同样的问题,我需要访问原始纹理数据以进行 phisics

DataStream dataStream = new DataStream(source.Size.Height * source.Size.Width, true, true);
bitmapSource.CopyPixels( source.Size.Width * sizeof(uint), dataStream);
var data = dataStream.ReadRange<uint>(source.Size.Width * source.Size.Height);

在论坛SharpDX forumsformore details

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 2018-06-25
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    相关资源
    最近更新 更多