[C#][Win8] RichEditBox 插入圖片

2012年12月26日

上一篇文章 [C#][Win8] RichEditBox 選取文字改粗體 說道如何將選取文字改為粗體.

這一篇來實作一下如何插入圖片..

 

2012-12-26_171839


[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

先介紹一下介面..

2012-12-26_154019


[C#][Win8] 抓取該電腦的IP位置

2012年12月24日


我是走公司網路,所以是走IP分享器出去的,如何抓取,我的IP位置呢?!
先說好,此範例並非抓取你在Internet上面的對外IP,而是你本機目前連線的IP..

因為參考這一篇文章

http://stackoverflow.com/questions/10336521/query-local-ip-address

他其中有簡單說明方法,但是我按照他Code 寫,感覺沒有抓到..

查一下MSDN,可能後來文件有改過,所以我是改成這樣寫的..

筆記一下給之後有碰到的人..


[C#] XML format convert to JSON

2012年12月15日

 

現在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#] 濾鏡筆記 - 圖片轉黑白

2012年12月14日

 

最近在試寫濾鏡.. 先從簡單的開始..

其實顏色原理就是由象素所組成,每一個象素的顏色敘述會分成 ARGB..

其實只要會去操控那些值就可以產生不同效果..

所以將個顏色都 乘上 0.33 也就是除以 3 ..


[C#] 濾鏡筆記 - 負片效果(Invert)

2012年12月13日

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#] 濾鏡筆記 – 增減亮度

2012年12月12日

這篇提一下有關於如何增加亮度..

原理就是將 Pixel 中的 R,B,G 其數值一起增加為一定量

但是增減時須注意是否會跳出 0~255 的區間..


[C#] 濾鏡筆記 – 動態模糊化、馬賽克 影像處理

2012年12月11日

 

其實模糊化跟馬賽克效果其實原理很像…

他其實是取一定範圍內的 R , G , B 均值之後寫回原本的 Pixel

正所謂跑一定均值就代表,要跑小迴圈,所以時間都會比較長一點

不過這是學習筆記,看一下他 Pixel 的 R G B 變化


[C#] 透過WebClient Post Data

2012年12月10日

 

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影像處理 + 浮雕效果

2012年12月9日

 

這幾天被斗哥一直碎念,為什麼不用 LockBits 處理

其實是不知道怎麼起筆..

簡單的說來當一張 Bitmap 被轉為   Format24bppRgb 一長串的數值..

轉成 16 進位大概會長這樣 …

2012-10-04_130923


[C#] 濾鏡筆記 – 高對比

2012年12月8日

 

圖像高對比,是一個一連串的複雜處理。

其概念,就是偏高值拉高 偏低值拉更低,而不是僅僅在特定方向移動的像素,

必須增加或減少像素集之間的差異。

原本我想說針對 200=> 255 , 50 =>0

但是對比不明顯也不好看…

就在網路上面找到公式

(((( 顏色色值 / 255.0) - 0.5) * 影響度 0~4 之間 ) + 0.5) * 255.0


[C#] 濾鏡筆記 – 偵測人的皮膚

2012年12月7日


其實人類的皮膚在一定的色域內,但是因為有光暗的明亮的關係

所以有許多演算法有加入邊界的運算等…

這邊參考了很多網站,我不是數學家,所以我把看到的幾個公式測過一次..

這邊記錄一下我測過的公式..

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數值

2012年12月6日

 

關於Gamma 網路上眾說紛紜,但是我看到一段比較讓人容易理解的解釋為

Gamme 是因應人類視覺特性而生的一種色彩處理方式。人類視覺特性之一 ,在微光的敏銳度大於強光中的敏銳度

也說在暗的環境下面,人眼所能區分的亮暗層次會比較多,簡單的說人類對於光的感受度是成對數而非線性分布

但是數位相機感應光線方式跟人類眼睛不同,他單純是紀錄感應到的光亮,對光線感受是呈現線性,一班的對比調整都是偏線性

移動調整,和人的感感受不同,於是Gamma曲線調整 使數位影像逼近人類看到的影像

參考文件:

http://www.photosharp.com.tw/blog20/article.aspx?m=didadida&id=5800

http://www.google.com.tw/url?sa=t&rct=j&q=&esrc=s&frm=1&source=web&cd=1&cad=rja&ved=0CF0QFjAA&url=http%3A%2F%2Fwww.thco.com.tw%2Fezfiles%2Fthco1%2Fimg%2Fimg%2F68759%2FVol27ImageMechanism.pdf&ei=8BMxUNeyLMffmAXw4oGoCw&usg=AFQjCNFHgdE-HPoEbpIflrDdf5ZPnCyMFw&sig2=BRG4AQQonC3F8AI_EQ_Qeg


[C#] 濾鏡筆記 – 銳利化

2012年12月5日

 

銳利化開始有點複雜要導入矩陣的觀念,因為他跟之前模糊化一樣

必須和周圍的點一起套入公式進行處理

可以參考這篇:

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#] 濾鏡筆記 – 漣漪效果

2012年12月4日

 

最近一些需求我要用到漣漪效果,讓文字變得讓機器人看不懂..

就是要歪七扭八,也就是要將圖片給液態化..

其中會用到比較多的數學跟演算方法

關於相關數學範例可以參考:

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#] 濾鏡筆記 – 色調濾鏡

2012年12月3日

 

這幾天寫到幾篇文章,其實發現都是在設定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;
}



其中比較特別的 就是我加入了門檻值 所以會提高紅色的深度


[C#] 透過 JSON.net 使用 BSON 格式

2012年12月2日

 

最近在研究NoSQL 的技術,看到一個很有趣的名詞,叫做BSON

2012-10-10_164541


[C#] Regex筆記- 找出所有的超連結+轉換相對路徑成絕對路徑

2012年12月1日

 

之前發過一篇文章有關於透過Regular Expression 來抓取網頁中超連結的部分 參考網頁

但是會於遇到這樣的情形..

2012-08-27_211035_thumb


[說好今夜不談程式] 原來每個月十四號都是情人節?!

2012年11月23日

這幾天看一個中國的節目影片,笑炸我了..
分享給大家看一下..



[C#] 與Android共舞–透過GET方式傳資料給Server(含解決中文編碼問題)

2012年11月22日


上一篇文章分享了透過POST 方式傳資料回Server,這一篇來談談有關於透過GET的方式傳遞
首先,如我預期的一樣,透過網址傳遞,會產生編碼問題,這邊我就順代解掉,希望有碰到的人
可以不用為此煩惱..
解說一下範例,手機傳遞給Server後,Server收到參數,直接印出來,然後手機再將資料取回,非常的簡單流程
中間只有傳遞不處理任何資料..


[C#][ASP.net] 透過 HttpWebRequest 模擬Client上傳檔案

 

事情是這樣子的(抖哥如是說),因為常常會跟其他開發技術合作像是 JSP or PHP ..

他們會跟你說我們上傳檔案是這樣子的..然後給你一個Sample Code :

Client :


<form action = "http://192.168.1.100/uploadFile.jsp"
method="post" enctype="multipart/form-data">
Desc : <input type="text" name="iptDesc">
<br>
<input type="file" name="uploadFileName" />
<input type="submit" value="上傳" />
</form>


實際上,他可能是在Server這邊的內網,那我該如何這邊透過Server 端 把使用者傳給我的圖片上傳給他呢?!
這時候要透過 HttpWebRerequest 來做


[C#] 與Android共舞–手機post資料給Server


最近在搞安卓,跟Server溝通是一定要的,這範例很簡單,就是我在Android 上面,透過POST 的方式傳資料給

Server ,則Server 收到值後直接回傳, Server side 是用asp.net C# 寫作..

現在直接來看Code

Server 端(C#):

建立一個echo.aspx 在aspx 得部分除了第一行全部都拿掉

只剩下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="echo.aspx.cs" Inherits="EchoService.echo" %>


[Android] 在XML中調整TextView的字體大小

2012年11月20日

 

不必透過程式設定..

 

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/imageView1"
android:textSize = "44sp"
android:text="TextView" />


上述highline的地方,單位是sp 就可以設定文字大小


[C#][ASP.net] 透過WebBrowser 取得AJAX 後的網頁

2012年11月17日


今天  Shih-Min 問我說,假設網頁一開始是AJAX 會載入一些資料,但是透過WebClient 去抓
抓到都是JavaScript 跟 AJAX 的原始碼,有辦法可以抓到AJAX 取完值之後的資料嗎?!
這需求,如果寫爬蟲可能也會有這需求..我的作法是這樣..
我是ASP.net 專案..
建立一個Class 記得要加入 System.Windows.Forms
2012-08-28_184816
這時候我建立一隻 Class 叫做 WebBrowserCrawler


[.Net] 透過 ILMerge.exe 將兩個DLL 檔合成

2012年11月16日



有時候要引入的外部的DLL 非常的多,今天試了工具,但是他們主要都是拿來做Winform 程式
都要我放入一個exe 檔,但是我的專案是ASP.net 阿..
結果我去測試了 aspnet_merge 的東西
參考網址: http://www.asp.net/web-forms/videos/how-do-i/how-do-i-use-the-aspnet_mergeexe-utility-to-merge-assemblies
實在是有夠給他複雜..
最後發現不要用 GUI 程式 直接使用 commandline 下指令就可以了


[C#] 刪除唯讀檔案

2012年11月15日

 

之前在測試Lucene.net 的時候,常發生一件事情,就是我有些檔案被設定成唯讀

造成我無法重新製作索引..

 

當我一般下刪除檔案或是檔案夾的時候

var dirInfo = new System.IO.DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory.ToString() + "Source\\");
dirInfo.Delete(true);


會出現



2012-08-22_120006




[C#] 如何洗亂 List

2012年11月14日


這問題很好玩,之前跟 The God of Excel -智揚學長 在旅行途中一直在想這問題..Orz..
剛好這幾天有遇到這樣的需求,因為老闆希望撈出來的商品,不要順序都一樣,是否可以增加變化感..
又再度引發公司熱烈討論,這問題真是令人著迷?!
無論是效率,或是方法真的都很好玩..
下面是我提供的方法..我在List 中先依序放入 1~50
之後再丟入ShuffleList中將它洗亂…
依序放入 1~ 50 :


[C#] 找尋string array 中是否有某一string

 

問題很簡單,有很笨的做法就是跑foreach 去查,但是已經到了21世紀,可以用LINQ語法來辦到

string[] pool = "AB,B,C,D".Split(',');

// true
MessageBox.Show((pool.Any(s => "B".Contains(s)).ToString()));

//true
MessageBox.Show((pool.Any(s => "AB".Contains(s)).ToString()));

//false
MessageBox.Show((pool.Any(s => "A".Contains(s)).ToString()));



假設 這 string array 為 AB,A,C,D


之後判斷是只要這樣寫就可以了

if (StringArray.Any(s => TargetString.Contains(s)))
 


[Windows8] 開始不見了,外掛來解決

2012年11月13日

 

Windwos 8 的新版 UI ,是一個新的思維,很適合平板,但是對於這十幾年來的習慣.

一時之間難以習慣..這時候外掛出現了..

2012-11-13_015014
下載位址 : http://www.startbutton8.com/zh-tw/

如果還不習慣的話,快去下載吧…


[說好今夜不談程式] Chrome的Flash Player 為啥沒有聲音


這幾天重新安裝電腦,結果Chrome 播放 Youtube 卻沒有聲音..(悶~
網路上試過很多方法,還有移除音效卡的= = ..後來我找到這方法.
1. 首先打開你的Chrome 在網址 輸入  chrome://plugins/
2012-11-13_000707


[C#] 找尋字串中是否包含某字詞..

2012年11月8日

 

假設字串是 "HELLO,IamAString" 我是搜尋 是否包含 string 這字..

會因為大小寫關係..所以可能會搜尋不到…

所以,我能想到的寫法為這幾種…

 

1.  使用 IndexOf 判斷

var isContain = "HELLO,IamAString".IndexOf("string", StringComparison.OrdinalIgnoreCase) >= 0;


2. 先將字串轉成大寫/小寫 之後再用Contains 比對


var isContain = "HELLO,IamAString".ToUpper().Contains("STRING");



3. 使用Regular Expression


var isContain = Regex.Match("HELLO,IamAString", "string", RegexOptions.IgnoreCase).Success;



這時候我在想,哪一個效率比較好,所以做了一個很簡單的測試


我使用一個List 裡面擺物件(剛好正寫到一半的專案就進行測試)
其中的Name 我跑迴圈 放入一百萬筆資料 分別他們的Name 欄位是User1~User1000000 這時候我進行搜尋 ER5 這字串看看哪 個速度比較快


[C#] 使用 Fasterflect 進行快速反射

2012年11月7日

 

之前一篇文章 [C#] 搜尋 T 裡面是否有某屬性中有某關鍵字

提到有關於 反射找出T 是否某一Property 帶有某值..

套一句 運轉手之戀這部電影說過的話..那時候我一值在想,如果再快一點會怎麼樣?!

之前的案例..

/// <summary>
/// 搜尋是否物件某屬性中是否帶有某關鍵字
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="lists"></param>
/// <param name="propertyName">屬性名</param>
/// <param name="propertyValue">是否包含某關鍵字</param>
/// <returns></returns>
public T[] SearchListPropertyValue<T>(List<T> lists, string propertyName, string propertyValue)
{
    List<T> re = new List<T>();
 
 
    return
        lists.Where(
            x => x.GetType().GetProperty(propertyName).GetValue(x, null).ToString().IndexOf(propertyValue, StringComparison.OrdinalIgnoreCase) >= 0).
            ToArray();
 
}


這時候我們呼叫 一個 擁有一百萬個物件的List


當麻許的超技八 2014 | Design: no2don.