国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

[GDI+] ColorMatrix 彩色矩陣

2024-07-21 02:17:08
字體:
來源:轉載
供稿:網友

首先對裝配腦袋給出上兩片文章的友好回復,還有網友fisherman一起探討colormatrix話題表示感謝!

colormatrix (彩色矩陣) 類位于system.drawing.imaging命名空間 先看看下面的代碼

colormatrix cm = new colormatrix(new float[][]{ new float[]{0.5f,0.5f,0.5f,0,0},
new float[]{0.5f,0.5f,0.5f,0,0},
new float[]{0.5f,0.5f,0.5f,0,0},
new float[]{0,0,0,1,0,0},
new float[]{0,0,0,0,1,0},
new float[]{0,0,0,0,0,1}});
矩陣系數組成一個 5x5 的線性轉換,用于轉換 argb 的單色值。例如,argb 向量表示為 alpha、red(紅色)、green(綠色)、blue(藍色)和 w,此處 w 始終為 1。

那么w是什么?為什么要定義為5x5的矩陣呢?

經過查找msdn發現有這篇文章 《使用顏色矩陣對單色進行變換》里面這樣講到:

gdi+ 提供用于存儲和操作圖像的 image 和 bitmap 類。image 和 bitmap 對象將每個像素的顏色都存儲為 32 位的數:紅色、綠色、藍色和 alpha 各占 8 位。這四個分量的值都是 0 到 255,其中 0 表示沒有亮度,255 表示最大亮度。alpha 分量指定顏色的透明度:0 表示完全透明,255 表示完全不透明。

顏色矢量采用 4 元組形式(紅色、綠色、藍色、alpha)。例如,顏色矢量 (0, 255, 0, 255) 表示一種沒有紅色和藍色但綠色達到最大亮度的不透明顏色。

表示顏色的另一種慣例是用數字 1 表示亮度達到最大。使用這種慣例,上一段中描述的顏色將用 (0, 1, 0, 1) 表示。gdi+ 在進行顏色變換時使用以 1 表示最大亮度的慣例。

可通過用 4×4 矩陣乘以這些顏色矢量將線性變換(旋轉和縮放等)應用到顏色矢量中。但是,您不能使用 4×4 矩陣進行平移(非線性)。如果在每個顏色矢量中再添加一個虛擬的第 5 坐標(例如,數字 1),則可使用 5×5 矩陣應用任何組合形式的線性變換和平移。由線性變換組成的后跟平移的變換稱為仿射變換。

我認為可以理解為虛擬向量


在visual c#下實現圖像的透明處理 這篇文章寫得不錯建議看看
地址:http://tech.ccidnet.com/pub/article/c294_a36258_p1.html

彩色矩陣應用到圖像上可以使用imageattributes.setcolormatrix 方法



[c#]

using system;
using system.drawing;
using system.drawing.imaging;
using system.collections;
using system.componentmodel;
using system.windows.forms;
using system.data;
namespace grayshear
{
/// <summary>
/// summary description for form1.
/// </summary>
public class form1 : system.windows.forms.form
{
/// <summary>
/// required designer variable.
/// </summary>
private system.componentmodel.container components = null;
public form1()
{
//
// required for windows form designer support
//
initializecomponent();
//
// todo: add any constructor code after initializecomponent call
//
}
/// <summary>
/// clean up any resources being used.
/// </summary>
protected override void dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.dispose();
}
}
base.dispose( disposing );
}
#region windows form designer generated code
/// <summary>
/// required method for designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void initializecomponent()
{
//
// form1
//
this.autoscalebasesize = new system.drawing.size(5, 13);
this.clientsize = new system.drawing.size(296, 269);
this.name = "form1";
this.text = "form1";
this.load += new system.eventhandler(this.form1_load);
}
#endregion
/// <summary>
/// the main entry point for the application.
/// </summary>
[stathread]
static void main()
{
application.run(new form1());
}
private void form1_load(object sender, system.eventargs e)
{
openfiledialog dlg = new openfiledialog();
dlg.filter="image files (*.bmp, *.jpg, *.gif)|*.bmp;*.jpg;*.gif";
if(dlg.showdialog()==dialogresult.ok)
{
image img = image.fromfile(dlg.filename);
bitmap bm = new bitmap(img.width,img.height);
graphics g = graphics.fromimage(bm);


colormatrix cm = new colormatrix(new float[][]{ new float[]{0.5f,0.5f,0.5f,0,0},
new float[]{0.5f,0.5f,0.5f,0,0},
new float[]{0.5f,0.5f,0.5f,0,0},
new float[]{0,0,0,1,0,0},
new float[]{0,0,0,0,1,0},
new float[]{0,0,0,0,0,1}});

/*
//gilles khouzams colour corrected grayscale shear
colormatrix cm = new colormatrix(new float[][]{ new float[]{0.3f,0.3f,0.3f,0,0},
new float[]{0.59f,0.59f,0.59f,0,0},
new float[]{0.11f,0.11f,0.11f,0,0},
new float[]{0,0,0,1,0,0},
new float[]{0,0,0,0,1,0},
new float[]{0,0,0,0,0,1}});
*/

imageattributes ia = new imageattributes();
ia.setcolormatrix(cm);
g.drawimage(img,new rectangle(0,0,img.width,img.height),0,0,img.width,img.height,graphicsunit.pixel,ia);
g.dispose();
this.backgroundimage=bm;
}
}
}
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 昌江| 巴东县| 大悟县| 靖远县| 开江县| 广元市| 涟水县| 甘孜县| 胶南市| 南宫市| 洪湖市| 井冈山市| 榆社县| 铁岭市| 商丘市| 惠东县| 咸阳市| 新蔡县| 嵩明县| 鄂托克旗| 怀安县| 西畴县| 长汀县| 永德县| 偏关县| 无为县| 吴堡县| 南木林县| 太仓市| 林州市| 澄江县| 龙胜| 泰兴市| 新密市| 嵊泗县| 镇巴县| 桦川县| 海兴县| 平原县| 开平市| 开平市|