GDI 入門(十三 GDI 例項 灰度效果)

2021-05-18 01:21:04 字數 3038 閱讀 5317

十三、gdi+例項——灰度效果

灰度化處理的方法主要有三種:

最大化法。這種方法的原理是使rgb的值等於值,即:

r=g=b

=max(r,g,b)

使用最大化法處理後的灰度影象的亮度很高。

平均值法。這種方法的原理是使rgb的恆等於三個色彩分量的平均值,即

r=g=b

= (r+g+b)/3

使用平均值法處理後的灰度影象亮度較為柔和。

加權平均值法。

「加權」是統計學中常用的名詞,這種方法是根據重要性或其他

指標給r、g、d賦於不同的權值,並位r、g、b等於它們的加權平均值。即:

r=g=b=(rr+gg+bb))/3

,r、g、b分別是r、g、b的權值*權數r、g、b取不同的值時,加權平均值法能夠形成不同灰度的灰度影象。由於人眼對綠色的敏感度最高,紅色次之,對藍色的敏感度最低,因此,當權值礦的時,所生成的灰度影象更符合人眼的視覺感受。通常,當r=30%,g=59%,b=11%時,這種影象的灰度較為合理。

private

static

bitmap bitmap;

private

int width;

private

int height;

public form1()

bitmap bmp2;

bitmap b***;

bitmap bmp4;

private

void button1_click(object sender, eventargs e)

} panel2g.drawimage(bmp2, panel2.clientrectangle);

panel2g.resettransform();

panel2g.translatetransform(width, 0);

// bmp2.dispose();

panel2g.dispose(); }

private

void panel1_paint(object sender, painteventargs e)

private

void redrawimage(bitmap bmp0)

if (g >= 192 && (!yes))

if (g <= 63 && (!yes))

if (g <= 127 && g >= 67 && (!yes))

//還原藍色分量

if (b <= 63)

b = 255;

if (b >= 128)

b = 0;

if (b >= 67 && b <= 127)

b = 510 - 4 * b;

color colorresult = color.fromargb(255, r, g, b);

bmp0.setpixel(i, j, colorresult); }

}graphics panel3g = panel3.creategraphics();

panel3g.drawimage(bmp0, panel3.clientrectangle);

bmp0.dispose();

panel3g.dispose(); }

//////最大值

///

///

///

private

void button3_click(object sender, eventargs e)

} panel2g.drawimage(b***, panel2.clientrectangle);

//b***.dispose();

panel2g.dispose(); }

//////

加權平均

///

///

///

private

void button4_click(object sender, eventargs e)

} panel2g.drawimage(bmp4, panel2.clientrectangle);

// bmp4.dispose();

panel2g.dispose(); }

private

int maxcolor(int r, int g, int b)

else }

else

else }

}private

void button2_click(object sender, eventargs e)

redrawimage(b***.clone(new

rectangle(0,0,width,height),pixelformat.dontcare)); }

private

void button2_click_1(object sender, eventargs e)

redrawimage(bmp2.clone(new

rectangle(0,0,width,height),pixelformat.dontcare)); }

private

void button6_click(object sender, eventargs e)

redrawimage(bmp4.clone(new

rectangle(0,0,width,height),pixelformat.dontcare)); }

button1_click

:平均值法

panel1_paint

:載入原圖

redrawimage

:灰色影象還原彩色影象

button3_click

:最大值法製作灰度影象

button4_click

:加權平均法製作灰度影象

maxcolor

:求顏色分量最大值

平均值方法:

最大值法:

加權平均法

本人也在學習gdi+,寫得比較簡單,讓高手見笑了。歡迎高手給我指點

[email protected] qq

:125941562

GDI 入門(十一 GDI 例項 底片效果)

十一 gdi 例項 底片效果 bool istrue false bitmap bmp private void button1 click object sender,eventargs e graphics g panel2.creategraphics g.drawimage bmp,pane...

GDI 入門(十四 GDI 例項 木刻效果)

十四 gdi 例項 木刻效果 木刻濾鏡 分析彩色中的每一點畫素值,如果該點比較亮,將之改為黑色 反之則改白色。亮與不亮的標準在於該點的r g b的平均分量值是否達到255 2。bitmap bmp new graphics g this.creategraphics g.translatetrans...

GDI 入門(十七 GDI 例項 油畫效果)

十七 gdi 例項 油畫效果 油畫濾鏡的演算法足 用當前點四周 定範圍內任一點的顏色末代替當前點的顏色。private void button1 click object sender,eventargs e g.drawimage bmp,new rectangle 205,0,200,200 g...