[C#][Win8] RichEditBox 選取文字改粗體
RicjTextEdior 在 Windows 8 App 開發中,跟以前有一點差異,這邊做一個很簡單的範例.
此篇範例只有做到將選取文字改成粗體,如果有其他需求可以參考
http://msdn.microsoft.com/zh-TW/library/windows/apps/windows.ui.text.itextcharacterformat
http://msdn.microsoft.com/en-us/library/windows/apps/BR227548
先介紹一下介面..
[C#][Win8] 抓取該電腦的IP位置
我是走公司網路,所以是走IP分享器出去的,如何抓取,我的IP位置呢?!
先說好,此範例並非抓取你在Internet上面的對外IP,而是你本機目前連線的IP..
因為參考這一篇文章
http://stackoverflow.com/questions/10336521/query-local-ip-address
他其中有簡單說明方法,但是我按照他Code 寫,感覺沒有抓到..
查一下MSDN,可能後來文件有改過,所以我是改成這樣寫的..
筆記一下給之後有碰到的人..
[C#] XML format convert to JSON
現在JSON 已經變成係在資料交換的當紅炸子雞,因為速度跟方便,雖然他在資料敘述上面,並非XML來的工整..
最近遇到跟一些比較'資深' 的廠商合作,它們提供XML
想到要自己處理DOM 有點麻煩,這時候研究一下怎麼轉JSON.
先看一下XML 範本 sample.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Row>
<use>0</use>
<page>1</page>
<pic_file_name>a.jpg</pic_file_name>
<product_name>A商品</product_name>
<url>http://www.msdn.com</url>
</Row>
<Row>
<use>1</use>
<page>1</page>
<pic_file_name>b.jpg</pic_file_name>
<product_name>B商品</product_name>
<url>http://www.msdn.com</url>
</Row>
<Row>
<use>2</use>
<page>1</page>
<pic_file_name>c.jpg</pic_file_name>
<product_name>C商品</product_name>
<url>http://www.msdn.com</url>
</Row>
<Row>
<use>3</use>
<page>2</page>
<pic_file_name>d.jpg</pic_file_name>
<product_name>D商品</product_name>
<url>http://www.msdn.com</url>
</Row>
<Row>
<use>4</use>
<page>2</page>
<pic_file_name>e.jpg</pic_file_name>
<product_name>E商品</product_name>
<url>http://www.msdn.com</url>
</Row>
</Root>
[C#] 濾鏡筆記 - 圖片轉黑白
[C#] 濾鏡筆記 - 負片效果(Invert)
Invert 英文叫做顛倒.. 原理很簡單也就是 將 255- 原本的值..
這樣 0(黑) 就會變成 255(白) 反之 255(白) 就會變成 0(黑)
所以公式就是將R、G、B 都用 255 去減..
就可以拿到反轉值,之所以會有這種效果需求跟以前底片有分正片根負片有關
大部分大家都是用負片的底片,洗出來時候剛好反過來的顏色變成你看到的相片..
C# Code:
public System.Drawing.Bitmap ConvertToInvert(System.Drawing.Image img) {
// 讀入欲轉換的圖片並轉成為 Bitmap
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(img);
for (int y = 0; y < bitmap.Height; y++)
{
for (int x = 0; x < bitmap.Width; x++)
{
// 取得每一個 pixel
var pixel = bitmap.GetPixel(x, y);
// 負片效果 將其反轉
System.Drawing.Color newColor = System.Drawing.Color.FromArgb(pixel.A, 255 - pixel.R, 255 - pixel.G, 255 - pixel.B);
bitmap.SetPixel(x, y, newColor);
}
}
// 結果
return bitmap;
}
[C#] 濾鏡筆記 – 動態模糊化、馬賽克 影像處理
[C#] 透過WebClient Post Data
Server 透過 WebClient 使用POST 傳送資料…
接收端:
接受 id 還有 age 兩個參數
Response.Write(Request.Form["id"]+","+Request.Form["age"]+".");
取得 id 還有 age 資料..
傳送端寫法:
string targetAddress = "http://localhost:1550/risiv.aspx";
string parameters = "id=許公蓋&age=12";
wc.Encoding = Encoding.UTF8;
wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
string result = wc.UploadString(targetAddress, parameters);
Response.Write(result);
targetAddress 為目標網址
parameter為參數值
因為在.net 世界都是 UTF8 編碼 但是你不能保證其他目標端是否是UTF8
最後參數故意戴許公蓋 這是職業病要測試一下此問題..
紀錄一下,最近跟其他公司合作很常用到這方法來做 proxy.
[C#] 濾鏡筆記 – LockBits影像處理 + 浮雕效果
[C#] 濾鏡筆記 – 高對比
[C#] 濾鏡筆記 – 偵測人的皮膚
其實人類的皮膚在一定的色域內,但是因為有光暗的明亮的關係
所以有許多演算法有加入邊界的運算等…
這邊參考了很多網站,我不是數學家,所以我把看到的幾個公式測過一次..
這邊記錄一下我測過的公式..
public static bool IsSkinColor(byte r, byte g, byte b)
{
// 公式 1 : http://www.codeproject.com/Articles/38176/Image-Processing-Skin-Detection-Some-Filters-and-E
//return ( (r > 95) && (g > 40) && (b < 20)) && ( (Math.Max(Math.Max(r, g), b)) - (Math.Min(Math.Min(r, g), b)) > 15) &&
// (Math.Abs(r - g) > 15) && (r > g) && (r > b) ||
// ( (r > 220) && (g > 210) && (b > 170) && (Math.Abs(r - g) == 15) && (r > b) && (g > b));
// 公式 2 :http://www.codeproject.com/Articles/38176/Image-Processing-Skin-Detection-Some-Filters-and-E
//if (r == 0 || b == 0 || g == 0) return false;
//return ((r/g) > 1.185) && (((r*b)/((r + g + b)*(r + g + b))) > 0.107) &&
// (((r*g)/((r + g + b)*(r + g + b))) > 0.112);
// 公式 3 :http://www.codeproject.com/Articles/8127/Skin-Recognition-in-C
//double I = (Math.Log(r) + Math.Log(b) + Math.Log(g)) / 3;
//double Rg = Math.Log(r) - Math.Log(g);
//double By = Math.Log(b) - (Math.Log(g) + Math.Log(r)) / 2;
//double hue = Math.Atan2(Rg, By) * (180 / Math.PI);
//if (I <= 5 && (hue >= 4 && hue <= 255))
//{
// return true;
//}
//else
//{
// return false;
//}
// 公式四 : http://w3.ualg.pt/~ftomaz/download/dicta2003.pdf
var Cb = (0.148 * r) - (0.291 * g) + (0.439 * b) + 128;
var Cr = (0.439 * r) - (0.368 * g) - (0.071 * b) + 128;
if ((r > 95 && g > 40 && b > 20 && (Math.Max(Math.Max(r, g),
b) - Math.Min(Math.Min(r, g), b) > 15) && (r - g) > 15 &&
r > g && r > b) &&
(Cr > 140 && Cr < 162 || Cb > 105 && Cb < 130))
{
return true;
}
else
{
return false;
}
}
[C#] 濾鏡筆記 – 調整Gamma數值
關於Gamma 網路上眾說紛紜,但是我看到一段比較讓人容易理解的解釋為
Gamme 是因應人類視覺特性而生的一種色彩處理方式。人類視覺特性之一 ,在微光的敏銳度大於強光中的敏銳度
也說在暗的環境下面,人眼所能區分的亮暗層次會比較多,簡單的說人類對於光的感受度是成對數而非線性分布
但是數位相機感應光線方式跟人類眼睛不同,他單純是紀錄感應到的光亮,對光線感受是呈現線性,一班的對比調整都是偏線性
移動調整,和人的感感受不同,於是Gamma曲線調整 使數位影像逼近人類看到的影像
參考文件:
http://www.photosharp.com.tw/blog20/article.aspx?m=didadida&id=5800
[C#] 濾鏡筆記 – 銳利化
銳利化開始有點複雜要導入矩陣的觀念,因為他跟之前模糊化一樣
必須和周圍的點一起套入公式進行處理
可以參考這篇:
http://stackoverflow.com/questions/903632/sharpen-on-a-bitmap-using-c-sharp
http://blog.csdn.net/jiangxinyu/article/details/6222322
關於拉普拉絲的矩陣是長這樣
// 建立3x3 矩陣 拉普拉斯
// -1 -1 -1 (0,0) | (1,0) | (2,0)
// -1 +9 -1 (0,1) | (1,1) | (2,1)
// -1 +1 -1 (0,2) | (1,2) | (2,2)
中心點加上9 周圍八點-1 後取相加平均…
[C#] 濾鏡筆記 – 漣漪效果
最近一些需求我要用到漣漪效果,讓文字變得讓機器人看不懂..
就是要歪七扭八,也就是要將圖片給液態化..
其中會用到比較多的數學跟演算方法
關於相關數學範例可以參考:
http://marlongrech.wordpress.com/2009/08/27/playing-with-shaders-creating-a-water-effect/
http://www.codeproject.com/Articles/2812/A-C-water-effect-picture-control
http://www.aforgenet.com/framework/docs/html/6f6ba0e1-cc41-0277-c856-598089b4ed02.htm
http://www.codeproject.com/Articles/3419/Image-Processing-for-Dummies-with-C-and-GDI-Part-5
整理過上述網站的Code 寫成一隻function 給有需要的人..
[C#] 濾鏡筆記 – 色調濾鏡
這幾天寫到幾篇文章,其實發現都是在設定R G B 的變化..
其實帶色調濾鏡 就是將一個值拉高 將其他值降低來達到的效果..
譬如純紅濾鏡..
/// <summary>
/// 純紅濾鏡
/// </summary>
/// <param name="bitmap">Bitmap</param>
/// <param name="threshold">門檻值 -255~255</param>
/// <returns></returns>
public System.Drawing.Bitmap AdjustToRed(System.Drawing.Bitmap bitmap, int threshold)
{
for (int y = 0; y < bitmap.Height; y++)
{
for (int x = 0; x < bitmap.Width; x++)
{
// 取得每一個 pixel
var pixel = bitmap.GetPixel(x, y);
var pR = pixel.R + threshold;
pR = Math.Max(pR, 0);
pR = Math.Min(255, pR);
// 將改過的 RGB 寫回
// 只寫入紅色的值 , G B 都放零
System.Drawing.Color newColor = System.Drawing.Color.FromArgb(pixel.A, pR, 0, 0);
bitmap.SetPixel(x, y, newColor);
}
}
// 回傳結果
return bitmap;
}
其中比較特別的 就是我加入了門檻值 所以會提高紅色的深度