2010-04-19 41 views
2

網格大小:160 * 160 行否*列= 16 * 16位插值C#

我創建了一個位圖這一點。網格中的每個單元都填充有不同的顏色。我需要執行顏色插值。

+4

*「我需要執行顏色插值「。* - 那很好......那麼你的問題是什麼? :) – gehho 2010-04-19 09:17:52

+0

@ghetto:必須有在某處有一個很好的問題,2個upvotes來證明這一點。 – 2010-04-19 10:15:39

+0

如何執行此使用樣條插值 – Raghav 2010-04-19 10:17:44

回答

10

我想你要做到以下幾點:以一個16×16像素的圖像,並將其插值到160×160像素的圖像。這裏有三個樣本輸出(你只說要使用樣條插補,但沒有哪一個):

  1. 近鄰
  2. 雙線性(應用在X和Y兩個方向linear spline interpolation
  3. 兩次立方(應用cubic spline interpolation在x和y方向)

original img http://img695.imageshack.us/img695/8200/nearest.png linear interpolation img http://img707.imageshack.us/img707/3815/linear.png cubic interpolation img http://img709.imageshack.us/img709/1985/cubic.png

.NET Framework提供的,還有一些人的方法(見MSDN, InterpolationMode Enumeration)。

該代碼將執行圖像縮放。 (我寫了一個擴展方法,但你可以放棄使用this關鍵字,並使用它作爲一個正常的功能):

public static Image EnlargeImage(this Image original, int scale) 
{ 
    Bitmap newimg = new Bitmap(original.Width * scale, original.Height * scale); 

    using(Graphics g = Graphics.FromImage(newimg)) 
    { 
     // Here you set your interpolation mode 
     g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bicubic; 

     // Scale the image, by drawing it on the larger bitmap 
     g.DrawImage(original, new Rectangle(Point.Empty, newimg.Size)); 
    } 

    return newimg; 
} 

你會使用這樣的:

Bitmap my16x16img = new Bitmap(16, 16); 
Bitmap the160x160img = (Bitmap)my16x16img.EnlargeImage(10); 
+0

位圖寬度爲160 * 160 * 4和每一個像素的寬度和高度爲16×16和4是像素格式ARGB,Initally的每個像素設置爲黑色具有α爲零。填充一些不同顏色的單元格。現在我想執行插值,以便使用三次樣條插值可以獲得平滑的圖像。請讓我知道如何做到這一點。 – Raghav 2010-04-20 06:06:43

+0

你的意思是你有16 * 16像素的正方形嗎?一個像素可能顯然不是16x16 ***大的東西。另一件事是不是我在我的回答中描述的? – 2010-04-20 10:19:27

+0

對不起,像素的大小是10 * 10。位圖大小不應該減小。請檢查這個鏈接http://www.codeproject.com/KB/cs/ColorShading.aspx,這是什麼要求使用三次樣條插值 – Raghav 2010-04-20 11:08:02