标签: writablebitmap

从BitmapSource复制到WritableBitmap

我试图将BitmapSource的一部分复制到WritableBitmap.

到目前为止这是我的代码:

var bmp = image.Source as BitmapSource;
var row = new WriteableBitmap(bmp.PixelWidth, bottom - top, bmp.DpiX, bmp.DpiY, bmp.Format, bmp.Palette);
row.Lock();
bmp.CopyPixels(new Int32Rect(top, 0, bmp.PixelWidth, bottom - top), row.BackBuffer, row.PixelHeight * row.BackBufferStride, row.BackBufferStride);
row.AddDirtyRect(new Int32Rect(0, 0, row.PixelWidth, row.PixelHeight));
row.Unlock();
Run Code Online (Sandbox Code Playgroud)

我得到"ArgumentException:值不在预期的范围内." 在线CopyPixels.

我试着换row.PixelHeight * row.BackBufferStriderow.PixelHeight * row.PixelWidth,但后来我得到一个错误说价值太低.

我找不到使用这个重载的单个代码示例CopyPixels,所以我正在寻求帮助.

谢谢!

c# wpf bitmapsource writablebitmap

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

根据Windows手机中的颜色裁剪图像边框

在此输入图像描述

以上是我正在使用的图像.我想要实现的是从图像中删除边框的红色部分.如何在Windows Phone中以编程方式实现此目的?我找到了WriteableBitmapExtensions.Crop()方法,但我对参数感到困惑(如何找到图像的x,y位置,以及大小和宽度?)

我面临的另一个问题是:我将获得具有不同大小边框的图像,因此我无法对x或y值进行硬编码.
任何人都可以建议解决方案,或指导我解决问题?

c# image windows-phone-7 windows-phone-8 writablebitmap

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

WPF不支持10位显示器(又名30位颜色)吗?

我需要在WPF图像查看应用程序中支持每像素10位显示(也称为30位颜色).

我有一个工作设置(10位屏幕和Nvidia Quadro),我已经能够通过PhotoShop中的渐变测试验证10位支持是否有效:(http://www.tedlansingphotography.com/blog/?p=287)和一个NEC演示程序(据我所知,都使用OpenGL).

但是,我不能让我的WPF应用程序显示一个漂亮的渐变没有条带.我尝试使用PixelFormats.Rgb48和PixelFormats.Bgr101010在程序上生成WritableBitmap但是当我在屏幕上绘制它时(通过将其分配给System.Windows.Controls.Image.Souce)我仍然看到条带.

  1. WPF不支持10位监视器吗?
  2. 是否有任何支持它的WPF友好API(或者我是否必须在OpenGL中重写程序)?

wpf image color-management color-depth writablebitmap

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

如何在 Windows 10 uwp 中有效地使用 WriteableBitmap.setpixel()?

我有一个场景

  • 选择一个图像文件,然后使用 BitmapDecoder 将源转换为 WriteableBitmap 并将 image.source 设置为 WriteableBitmap。
  • 现在,当用户点击图像时,我会得到坐标,然后想用特定颜色为该像素周围的整个区域着色。(就像油漆中的填充选项)。

我使用的代码是

 private void setPixelColors(int xCord, int yCord, int newColor)
 {
    Color color = bit.GetPixel(xCord, yCord);
    if (color.R <= 5 && color.G <= 5 && color.B <= 5 || newColor == ConvertColorToInt(color))
    {
        //Debug.WriteLine("The color was black or same returning");
        return;
    }
    setPixelColors(xCord + 1, yCord, newColor);
    setPixelColors(xCord, yCord + 1, newColor);
    setPixelColors(xCord - 1, yCord, newColor);
    setPixelColors(xCord, yCord - 1, newColor);
    //Debug.WriteLine("Setting the color here");
    bit.SetPixel(xCord, yCord, newColor);
 }
Run Code Online (Sandbox Code Playgroud)

这有效,但效率极低。我想知道有没有更好的方法来做到这一点。 …

c# winrt-xaml writablebitmap windows-10 uwp

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