2014-12-19 3 views
1

Я хочу настроить контраст изображения в Windows Phone 8.1 Я нашел образцы для Windows Phone 7, но он не работает в Windows Phone 8.1.Отрегулируйте изображение в 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; 
      } 
     } 

// дополнительный Buffer.BlockCopy (tempPixels, 0, inputPixels, 0, tempPixels.Length);

 return result; 
    } 

«SetValue» был «пикселей» в исходном образце, но Пиксели не существует в этом объекте на WP8.1.

Что такое эквивалент, пожалуйста?

+1

Следующая SDK визуализации имеет фильтрацию, что ваши пытаются использовать и многое другое http://developer.nokia.com/ lumia/nokia-apis/imaging –

+0

Спасибо вам большое! –

ответ

1

Вы хотите изменить массив int [] tempPixels. Как только вы закончите с этим, вы хотите скопировать массив tempPixel обратно в result.PixelBuffer. Вы можете использовать Buffer.BlockCopy для копирования блока в другой блок.

Полный пример: как настроить яркость: Adjust Brightness WriteableBitmap 8.1

Полный пример: оттенки серого изображения: Grayscale an Image WriteableBitmap 8.0


Не забудьте добавить в System.IO и System.Runtime.InteropServices.WindowsRuntime для указанных выше для работы решений.

Я также включил полный 8.1 проект здесь, на моем OneDrive: Adjust Brightness Project 8.1


+0

Привет, все еще получаю такие ошибки, как: «Windows.Storage.Streams.Buffer» не содержит определения для «AsStream» не может конвертировать из «Windows.Storage.Streams.ibuffer» в «Windows.Storage.Streams.IRandomAccessStream» \t не может конвертировать из «Windows.Storage.Streams.ibuffer» в «System.Array» –

+0

Я считаю, что это потому, что я создаю приложение для Windows Phone Store –

+0

@AndrewSimpson: вы используете 8.1 Silverlight или 8.1 runtime? –