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

标签 c# directx direct2d sharpdx

我使用 SharpDX,但我不明白如何获取位图的像素颜色。我找到了 CopySubresourceRegion 方法,但它适用于 Direct3D。 我有一个奇怪的想法:

我可以创建 RenderForm 并在表单上绘制我的位图。然后得到表格的图形。然后通过“new Bitmap(宽度,高度,图形)”创建位图。然后从新的位图中获取像素颜色;

最佳答案

我编写了获取像素颜色的特殊函数。这解决了我的问题;) 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]);
    }

关于c# - 如何在 SharpDX 上获取 Direct2D 位图的像素颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36681631/

相关文章:

c# - 安卓 XAMARIN : Camera intent is returning with null data in callback

c# - Razor 语法在编译前在 View 中给出错误(无智能感知)

c++ - Direct3D 多顶点缓冲区,非交错元素

像素着色器问题中的 c++ DirectX 照明

c# - SDK 路径在 Notepad++ plugin.net 中为空

c# - 通过反射找不到添加到程序集中的新类

c++ - NV12 纹理在 DirectX 11.1 中不起作用

delphi - Direct2D 文本周围的边框

c++ - ID2D1HwndRenderTarget 总是有黑色背景而不是透明

c++ - 如何创建 Direct2D 工厂