Silveright是以WPF為基礎的"精簡"瀏覽器應用程式,在開打Visual Studio Web Develop 2010專案的時候,會看到WPF瀏覽器應用程式跟Silverlight應用程式,這兩者的差別是WPF瀏覽器應用程式必須是Windows的電腦,並且安裝dotNet Framework 3.0以上,才能運作,而Silverlight是一個跨平台的WPF應用程式,他跟Flash一樣,只需安裝瀏覽器專屬的Silverlight plug-in 即可運作,這個學期的"多媒體整合"必須做出一個網頁,截止收件日期似乎是接近5月底,目前打算運用Silverlight技術來開發,弄了好久,現在終於有一個初步的成果。

  這是一個影片處理的程式,可以用來處理"影片",目前只能載入Mp4、wmv、跟一些格式的影音檔,按下"載入影片"載入之後,點選"擷取影像",右圖為影片即時灰階化(Gray Image),左邊為原影像(Original Image)。

小賢 發表在 痞客邦 留言(0) 人氣()

private void button2_Click(object sender, RoutedEventArgs e)
{
    WriteableBitmap writeableBitmap = new WriteableBitmap(bitmapImage);
    int startTime = Environment.TickCount;

    int width = bitmapImage.PixelWidth;
    int height = bitmapImage.PixelHeight;
    int stride = width * ((bitmapImage.Format.BitsPerPixel + 7) / 8);
    byte[] pixel = new byte[height * stride];
    
    writeableBitmap.CopyPixels(pixel, stride, 0);

    Parallel.For(0, height, y =>
    {
        int x;

        for (x = 0; x < stride; x++)
        {
            pixel[x + y * stride] = (byte)(255 - pixel[x + y * stride]);
        }
    });

    writeableBitmap.WritePixels(new Int32Rect(0, 0, width, height), pixel, stride, 0);
    image1.Source = writeableBitmap;

    this.Title =(Environment.TickCount - startTime) + " ms";

    //CroppedBitmap
}

  這是WPF對影像做顏色反轉的程式,使用CopyPixels取得每一點的BGRA的byte array之後,用Parallel.For(平行For)進行反轉RGB顏色,然後用WritePixels把處理完後的BGRA array寫回去,然後使用image1顯示出來。

 

小賢 發表在 痞客邦 留言(1) 人氣()

  又到了每個禮拜最期待的課,星期五的型態影像學,老師這次教了影像侵蝕跟擴張,然後有個叫作SE(Structuring Element)的東西,可以翻成結構元素或構成元素,它有點像是四鄰居或是八鄰居的mask(遮罩),所以在呼叫副程式的時候,可以傳入一個"泛型"(任何型態)的遮罩,然後做運算。

 

小賢 發表在 痞客邦 留言(0) 人氣()

  開始變忙碌了,每當期中考過後,是另一波高潮的開始...

992行程.png

小賢 發表在 痞客邦 留言(0) 人氣()

RGB to HSI

R = rgbData[y, x, 0];
G = rgbData[y, x, 1];
B = rgbData[y, x, 2];

r = (double)R / (R + G + B);
g = (double)G / (R + G + B);
b = (double)B / (R + G + B);

value1 = 0.5 * ((r - g) + (r - b));
value2 = Math.Pow((Math.Pow(r - g, 2) + (r - b) * (g - b)), 0.5);

radial = Math.Acos(value1 / value2);
theta = (int)(radial * 180.0 / Math.PI);

if (!double.IsNaN(theta))
    h = (b > g) ? (360 - theta) : theta;
else
    h = 0;

s = 1 - 3 * CompareRGB.Min(r, g, b);
if (double.IsNaN(s))
    s = 0;

i = (R + G + B) / 3.0;

HSI to RGB

小賢 發表在 痞客邦 留言(5) 人氣()