如何在SharpDX上获取Direct2D位图的像素颜色

时间:2016-04-17 20:08:16

标签: c# directx direct2d sharpdx

我使用SharpDX并且我不了解如何在位图上获得像素颜色。我找到了CopySubresourceRegion方法,但它在Direct3D上运行。 我有一个奇怪的想法:

我可以创建RenderForm并在表单上绘制我的位图。然后获取表单图形。然后通过"新的位图(宽度,高度,图形)和#34;创建位图。然后从新位图获取像素颜色;

2 个答案:

答案 0 :(得分:2)

我写了一个获取像素颜色的特殊功能。这解决了我的问题;) C# - SharpDX

Color4 GetPixel(Bitmap image, int x, int y, RenderTarget renderTarget) {
        var deviceContext2d = renderTarget.QueryInterface<DeviceContext>();
        var bitmapProperties = new BitmapProperties1();
        bitmapProperties.BitmapOptions = BitmapOptions.CannotDraw | BitmapOptions.CpuRead;
        bitmapProperties.PixelFormat = image.PixelFormat;
        var bitmap1 = new Bitmap1(deviceContext2d, new Size2((int)image.Size.Width, (int)image.Size.Height), bitmapProperties);
        bitmap1.CopyFromBitmap(image);
        var map = bitmap1.Map(MapOptions.Read);
        var size = (int)image.Size.Width * (int)image.Size.Height * 4;
        byte[] bytes = new byte[size];
        Marshal.Copy(map.DataPointer, bytes, 0, size);
        bitmap1.Unmap();
        bitmap1.Dispose();
        deviceContext2d.Dispose();
        var position = (y * (int)image.Size.Width + x) * 4;
        return new Color4(bytes[position], bytes[position + 1], bytes[position + 2], bytes[position + 3]);
    }

答案 1 :(得分:1)

如果您的目标是Direct2D 1.1(或更高版本),则可以使用ID2D1Bitmap1::Map方法。这将要求您在创建位图时在位图上设置 D2D1_BITMAP_OPTIONS_CPU_READ D2D1_BITMAP_OPTIONS_CANNOT_DRAW flags

相关问题