2010-08-25 3 views
1
private void SetAlpha(string location) 
{ 
    //bmp is a bitmap source that I load from an image 
    bmp = new BitmapImage(new Uri(location)); 
    int[] pixels = new int[(int)bmp.Width * (int)bmp.Height]; 
    //still not sure what 'stride' is. Got this part from a tutorial 
    int stride = (bmp.PixelWidth * bmp.Format.BitsPerPixel + 7)/8; 

    bmp.CopyPixels(pixels, stride, 0); 
    int oldColor = pixels[0]; 
    int red = 255; 
    int green = 255; 
    int blue = 255; 
    int alpha = 0; 
    int color = (alpha << 24) + (red << 16) + (green << 8) + blue; 

    for (int i = 0; i < (int)bmp.Width * (int)bmp.Height; i++) 
    { 
     if (pixels[i] == oldColor) 
     { 
      pixels[i] = color; 
     } 
    } 
     //remake the bitmap source with these pixels 
     bmp = BitmapSource.Create(bmp.PixelWidth, bmp.PixelHeight, bmp.DpiX, bmp.DpiY, bmp.Format, bmp.Palette, pixels, stride); 
    } 

} 

Не могли бы вы объяснить этот код для меня? Что означает color и oldColor?Нужна помощь при понимании данного примера кода

+0

На каком языке? Что такое ОС? – Dummy00001

+0

WPF - это Windows Presentation Foundation, структура, используемая для создания клиентских приложений для Windows, поэтому ОС должна быть WINDOWS - это язык .NET? –

ответ

5

Этот код заменяет и oldColor новым цветом в растровом изображении RGBA.

Новый цвет полный - непрозрачный белый. Старый цвет берется из первого пикселя. много значков и масок

Stride - сколько байтов на строку/строку сканирования есть.

Ошибки:

1) bmp.CopyPixels (пиксели, шаг, 0); копирует только первую строку. это shouls bmp.CopyPixels (пиксели, шаг * bmp.Height, 0);

2) Он позволяет настроить цвет RGB. Он не проверяет результаты «нового BitmapImage» «new int []» и BitmapSource.Create

3) неправильное имя функции.

+1

+1 только для того, чтобы «имя funcion было неправильным». Хороший ответ. –