Image processing 在Windows Phone 8.1中调整图像

Image processing 在Windows Phone 8.1中调整图像,image-processing,windows-phone-8.1,Image Processing,Windows Phone 8.1,我想在Windows Phone 8.1中调整图像的对比度 我找到了Windows Phone 7的示例,但它在Windows Phone 8.1中不起作用 这是我的代码: public static WriteableBitmap ChangeContrast(WriteableBitmap Bitmap, int[] orgPixels,

我想在Windows Phone 8.1中调整图像的对比度 我找到了Windows Phone 7的示例,但它在Windows Phone 8.1中不起作用

这是我的代码:

    public static WriteableBitmap ChangeContrast(WriteableBitmap Bitmap,
                                                    int[] orgPixels,
                                                    double contrastValue)
    {
        var result = new WriteableBitmap(Bitmap.PixelWidth, Bitmap.PixelHeight);
        var contrastFactor = (50f + contrastValue) / 50f;
        contrastFactor *= contrastFactor;
        var contrastFactorIndex = (int)(contrastFactor * 32768);
        var inputPixels = Bitmap.PixelBuffer;
        int[] tempPixels = new int[Bitmap.PixelBuffer.Length];
        orgPixels.CopyTo(tempPixels, 0);
        if (0 != Bitmap.PixelBuffer.Length)
        {
            for (int index = 0; index < Bitmap.PixelBuffer.Length; index++)
            {
                // Extract color components
                var color = tempPixels[index];
                var alpha = (byte)(color >> 24);
                var red = (byte)(color >> 16);
                var green = (byte)(color >> 8);
                var blue = (byte)(color);
                int ri = red - 128;
                int gi = green - 128;
                int bi = blue - 128;

                // Multiply contrast factor
                ri = (ri * contrastFactorIndex) >> 15;
                gi = (gi * contrastFactorIndex) >> 15;
                bi = (bi * contrastFactorIndex) >> 15;

                // Transform back to range [0, 255]
                ri = ri + 128;
                gi = gi + 128;
                bi = bi + 128;
                // Clamp to byte boundaries
                red = (byte)(ri > 255 ? 255 : (ri < 0 ? 0 : ri));
                green = (byte)(gi > 255 ? 255 : (gi < 0 ? 0 : gi));
                blue = (byte)(bi > 255 ? 255 : (bi < 0 ? 0 : bi));
                result.SetValue[index] = (alpha << 24) | (red << 16) | (green << 8) | blue;
            }
        }
原始样本中的“SetValue”为“pixels”,但WP8.1上的此对象中不存在像素


请问等效值是多少?

您想修改int[]tempPixels数组。完成后,您需要将tempPixel阵列复制回result.PixelBuffer。您可以使用
Buffer.BlockCopy
将一个块复制到另一个块

完整示例:如何调整亮度:

完整示例:灰度图像:


请记住添加
System.IO
System.Runtime.InteropServices.WindowsRuntime
,以使上述解决方案正常工作

我还将完整的8.1项目包含在我的OneDrive中:



下面的imaging sdk提供了您尝试使用的过滤功能,还有更多功能,非常感谢!你好仍然出现错误,例如:“Windows.Storage.Streams.IBuffer”不包含“AsStream”的定义,无法从“Windows.Storage.Streams.IBuffer”转换为“Windows.Storage.Streams.Irandomaccesstream”,无法从“Windows.Storage.Streams.IBuffer”转换为“System.Array”,我相信这是因为我正在创建Windows Phone应用商店App@AndrewSimpson您运行的是8.1 Silverlight还是8.1运行时?8.1运行时。我是wp开发的新手。没有意识到有两个types@AndrewSimpson签出onedrive项目:(它几乎应该转换为phone 8.1运行时1:1)
        return result;
    }