星期三, 10月 31, 2007

WebBrowser讀取frame

HtmlWindow currentWindow = WebBrowser1.Document.Window;

1.get frame by id
HtmlWindow frame = currentWindow.Frames["aaa"]

2.get frame one by one
foreach (HtmlWindow frame in currentWindow.Frames)
{
//frame即為所求
}

*有n個frames的會跳n次completed+本身的html page 共n+1次

資源:HtmlWindow.Document 屬性

星期二, 10月 30, 2007

div隱藏技

div的visibility可以隱藏本身,但會變成一個空格
用法:
<[div] id="test" style="visibility: none;">
屬性選項:

visibility: hidden;
visibility: visible;
Javascript寫法
document.getElementById("test").style.visibility="hidden";
document.getElementById("
test").style.visibility="visible";

利用display可以讓後面的物件往上拉
用法:style="display: none;"
屬性選項:
none;//隱藏
空白即為顯示
javascript寫法
  document.getElementById("test").style.display="none";//隱藏
  document.getElementById("test").style.display="";//顯示

星期四, 10月 25, 2007

lapasta 義麵屋

http://www.lapasta.com.tw/

吃過最好吃的義大利麵了吧
而且很划算 平均200多塊錢一盤
份量很多 而且加麵不加價

原本在天母中山北路
後來搬到...天母新光那兒...

取得運算過的static變數

好難形容
總之就是不new一個class
而要直接使用ClassName.attribute
public class a
{
public static string aString="hi";

static
{
aString += " this is how it works";
}
}

ex. a.aString; ==> hi this is how it works

星期二, 10月 23, 2007

使用介面設計資源

書籍
1."Don't make me think", Steve Krug (有中文版)
2."Information Architecture for the World Wide Web", Louis Rosenfeld and Peter Morville, O'Reilly (有中文版)
比較理論,教科書
3."Designing Interfaces", Jenifer Tidwell, O'Reilly, 中文:操作介面設計模式
較像工具書,作者提供12心法與94招讓讀者學習

CSS

書:
Eric Meyer
css視覺設計之王道, Dave Shea and Molly Holzschlag , www.csszengarden.com

網站:
http://www.pt.ntu.edu.tw/hmchai/PTcomputer04/hCSS/CSSadvanced.htm
http://www.twbts.com/css/
http://www.openwebdesign.org/
http://www.oswd.org/

星期一, 10月 15, 2007

甜橘牛排餐廳

http://www.orange-group.net
南京總店:台北市南京東路三段112號 Tel:2507-3136
天母分店:台北市忠誠路二段132號 Tel:28772591

VNC(Virtual Network Computing)- 遠端遙控軟體

VNC 官方網站:http://www.realvnc.com

步驟:

安裝vnc (//Fedora發行版巳包含了VNC軟體)
=>apt-get install vnc-server

啟動vnc server (初次啟動server會要求密碼,啟動後會在各user家目錄下產生.vnc資料夾)
=>vncserver //vncserver
/etc/rc.d/init.d/vncserver似乎不一樣

修改畫面設定檔
=>
vi ~/.vnc/xstartup 取消此兩行前面的 #

unset SESSION_MANAGER

exec /etc/X11/xinit/xinitrc

p.s Fedora發行版巳包含了VNC軟體,不過預設使用TWM視窗管理程式,可以修改為GNOME如下:

mkdir /etc/vnc/

用文書編輯軟體開啟 /etc/vnc/xstartup 輸入一行 exec /etc/X11/xinit/Xclients 後存檔離開

chmod+x /etc/vnc/xstartup

修改帳號設定檔
=>
vi /etc/sysconfig/vncservers

# VNCSERVERS="1:myusername" 修改成-->VNCSERVERS="1:root"

# VNCSERVERARGS[1]="-geometry 800x600"

重新啟動
/etc/rc.d/init.d/vncserver restart

開放port

VNC使用兩個port,請記得開放,5801:tcp,5901:tcp

測試
使用網頁瀏覽器遠端遙控 Fedorahttp://IP:5801

註:

因為使用瀏覽器連上 vncserver 的時候會執行 java applet,所以 client 端一定要先安裝 java 相關軟體才行
http://www.java.com/zh_tw/download/manual.jsp

TightVNC for Windowshttp://umn.dl.sourceforge.net/sourceforge/vnc-tight/tightvnc-1.2.9-setup.exe

使用網頁瀏覽器遠端遙控 Windowshttp://IP:5800

VNC 官方文件:http://www.realvnc.com/documentation.html

Pthread

1.程式中載入
2.compile時,加入-pthread參數

範例=========================
#include <stdio.h>
#include <stdlib.h>  //因為在fc系統下,exit會有warnning,include此就不會有了
#include <pthread.h> //unix下的多執行緒

void *mythread(void *arg)
{
for (;;) {
printf("thread\n");
sleep(1);
}
return NULL;
}

int main(void)
{
pthread_t th;

if (pthread_create(&th,NULL,mythread,NULL)!=0)
exit(0);

for (;;) {
printf("main process\n");
sleep(3);
}
}
執行結果:
main process
thread
thread
thread
main process
thread
thread
thread
main process
thread
thread
thread

索引

專科時期買的書,到現在才用到,也算是沒浪費了

何時可利用索引
  • where引數資料篩選
    • SELECT * FROM employee WHERE EmpID = 'xxx' //先替EmpID建立索引,將能提昇查詢速度
    • SELECT * FROM employee WHERE Salary BETWEEN 6000 and 7000 //先替Salary 建立索引,將能提昇查詢速度
*當使用LIKE時,常數字開頭才會使用索引(例:'abc%'),以萬用字元開頭將不會(例:'%仁')
  • Order By
    • SELECT name FROM employee ORDER BY name //建立name索引
  • GROUP By
    • SELECT department,avg(salary) FROM employee GROUP BY department //建立department索引
  • 連結資料表
    • SELECT * FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID //替Customers資料表根據CustomerID欄位建立索引,並替Orders資料表根據CustomerID建立索引,資料表連結速度會大幅提升
SQL Server如何判斷是否要使用索引
  1. 先檢查存在根據適當欄位建立的索引,以及確認此索引是否有助於本次的存取作業
    • 確實存在有助益的索引,SQL Server即會使用索引表的資料記錄,再繼續步驟2
    • 如不存在,即進行「資料表掃描」完成存取作業
  2. 會從根分頁開始,沿著索引樹狀結構尋找查詢所要的資料
  3. 將符合查詢條件資料記錄篩選出來

資源

CSS2.0中文手冊(繁體中文版 by:藤原直樹 翻譯製作)

圖片資源
http://www.fotolia.com/search?k=golf&order=relevance&offset=1760

星期六, 10月 13, 2007

Thread Lock與Monitor的不同

Thread.Lock class
說明:對資源取得獨佔
Method:
public void lock(Object obj)
語法:
lock(objlock)
{
同步化執行相關程式碼
}

Thread.Monitor class
說明:進一步阻斷或繼續特定thread的動作,使資源能夠被控制
Method:
//回復第一個被暫停的thread
public static void Pulse(Object obj)

//釋放該thread佔有的資源
public static bool Wait(Object obj,int milliseconds)
public static bool Wait(Object obj):

*使用monitor方法時,需將其包在enter和exit中
ex.
Monitor.Enter(this);
...
Monitor.Pulse(this);
...
Monitor.Exit(this);

當存在一個以上的執行緒,而其中一個必須等待另一個完成,才能繼續執行

狀況:當存在一個以上的執行緒,而其中一個必須等待另一個完成,才能繼續執行

Trehad.Sleep()只能單純暫停執行,因此變不適用
Thread類別提供Join() -- Thread 等待其他Thread完成
例:有兩個threads
thread1.start();
thread2.start();
當thread2.Join()時,thread1會等待thread2執行完。

星期二, 10月 09, 2007

linux與windows的scp - WinSCP

在linux下使用scp互傳檔案相當方便
不過要跟windows互傳可就頭大
雖然有smb~不過現在NHCH有出WinSCP
感覺跟FTP好像~~滿不錯的



後記..
中文會有編號問題 還是用FileZilla吧....

星期一, 10月 08, 2007

利用panel放背景圖

JPanel panel = new JPanel()

{
protected void paintComponent(Graphics g)
{

// g.drawImage(ic.getImage(), 0, 0, null);

// Scale image to size of component
Dimension d = getSize();
g.drawImage(ic.getImage(), 0, 0, d.width, d.height, null);

// Fix the image position in the scroll pane

// Point p = scrollPane.getViewport().getViewPosition();
// g.drawImage(icon.getImage(), p.x, p.y, null);

super.paintComponent(g);
}
};
panel.setOpaque( false );
panel.setPreferredSize( new Dimension(400, 400) );
getContentPane().add( panel);

JButton button = new JButton( "Hello" );
panel.add( button );
panel.setBounds(getBounds());

[C#] 如何設定為全螢幕模式

轉貼http://chuiwenchiu.spaces.live.com/blog/cns!CA5D9227DF9E78E8!990.entry

[C#] 如何設定為全螢幕模式

MSN SpaceGoogle DocGoogle Blog
Chui-Wen Chiu(Arick)
2007.03.16 建立

要將視窗設定為全螢幕模式[1][5],主要有兩個部份
1. 視窗無框線
2. 視窗大小等於螢幕大小

在 .NET 的 Windows Form 中,只需要透過簡單的設定即可達到這個效果,
1. Form.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; //設定成無框線[2]
------ 指this (form)
2. Form.WindowState = FormWindowState.Maximized; // 視窗設定為最大化[3]
------ 指this (form)
如果要設定更穩妥一點,可以再將視窗設定為最上層顯示,也就是將 Form.TopMost [4]設定為 true。
一 般情況下,上述的作法就可以滿足,如果你想做的更好一些,將 Windows 工具列隱藏而非覆蓋[6],此時需要透過 Windows API 來達成,主要的概念是用 FindWindow 找尋工具列的視窗 Handle,再透過 ShowWindow 將該視窗 Handle 隱藏,C# 要實現這個機制的成片段如下

private const int SW_HIDE = 0;
private const int SW_SHOW = 1;

[DllImport("user32.dll")]
private static extern int FindWindow(string className, string windowText);
[DllImport("user32.dll")]
private static extern int ShowWindow(int hwnd, int command);

int hWnd = FindWindow("Shell_TrayWnd", "");
ShowWindow(hWnd, SW_HIDE);

理 想上,上述已經算是相當的完美,但依據[5][6]的說法,即便是將工具列隱藏和 Form.WindowState = FormWindowState.Maximized 仍可能會使應用程式無法涵蓋整個螢幕,最後還是必須透過 Windows API 將 Windows 設定成和視窗一樣大小。先利用 GetSystemMetrics(SM_CYSCREEN) 和 GetSystemMetrics(SM_CXSCREEN) 分別取得螢幕的寬和高,最後再透過 SetWindowsPos 將視窗設定成和螢幕等寬並且置於上層
SetWindowPos(hwnd, HWND_TOP, 0, 0, GetSystemMetrics(SM_CYSCREEN), GetSystemMetrics(SM_CXSCREEN), SWP_SHOWWINDOW);

參考資料
[1] Full Screen Mode in C#
[2] Form.FormBorderStyle 屬性(System.Windows.Forms)
[3] Form.WindowState 屬性(System.Windows.Forms)
[4] Form.TopMost 屬性(System.Windows.Forms)
[5] Full Screen Video Display
[6] How to make Windows Form app truly Full Screen (and to hide Taskbar) in C#?
[7] How To Cover the Task Bar with a Window

星期五, 10月 05, 2007

跨執行緒作業無效

Problem:跨執行緒作業無效: 存取控制項 'form2' 時所使用的執行緒與建立控制項的執行緒不同

Answer:
private void ThreadTask()
{
//form2.Visible = true; //出現所使用的執行緒與建立控制項的執行緒不同
ShowForm(); //改用ShowForm()即可
}

private void ShowForm()
{
if (form2.InvokeRequired)
form2.Invoke(new MethodInvoker(ShowForm)); //此ShowForm為delgete型態,即傳Method Name
else
form2.Visible = true;
}

*如果要傳值的話...
以傳string為例,先自行定義delegate
delegate void mydel(string str);
...

//呼叫ShowForm()+傳值
ShowForm("oh ya~")

private void ShowForm(string str)
{

if form2.InvokeRequired)
this.Invoke(new mydel(ShowForm), new object[] { str});
else
this.title =(string)obj[0];
}

注意:如果傳的值是物件的話,得clone新的物件
例:上例

delegate void mydel(Object [] args);
...
//呼叫ShowForm()+傳值
ShowForm( new Object[1])
private void ShowForm(Object [] args)
{
if (this.InvokeRequired)
this.Invoke(a, args.clone()); //clone一個新的
...
}


*較簡單的方法 (轉)

在form_load時加一行
ListBox.CheckForIllegalCrossThreadCalls = False
這樣就會關閉所有listbox的檢查是否為不合法的跨執行緒存取
從vs2005開始, 所有windows form控制項, 都多了一個[能否任意跨執行緒變更屬性]的靜態屬性
這是為了防止控制項在多執行緒情況下工作時, 同時有多個執行緒存取單一控制項, 導致程式發生死結
所以如果要跨執行緒存取控制項, 必須使用Control.Invoke的方法, 來變更控制項目前的屬性,
如果覺得這樣做太麻煩, 而且您自己確定, 不會發生死結

星期三, 10月 03, 2007

重灌注意事項

1.學校、工作資料

2.網頁書籤

3.遊戲檔案、地圖、存檔

4.行事曆備份

5.eMail信件、通訊錄

6."我的文件" ex. putty,下載的檔案

Ubuntu Adjustment

1. 輸入法
1.1 安裝嘸蝦米
1.2 輸入法微調
2:配置X預設輸入法,在/etc/X11/Xsession.d/95xinput-set中加入:
export XMODIFIERS=@im=SCIM
scim -d
2.Samba
apt-get install
3.影音
3.1 SMplayer
下載網頁: http://wesley.debianbox.be/packages/
"推薦的原因,簡單說,他讓Un*x 下,看影片的過程變輕鬆了!不再需要跟一堆設定檔案奮鬥。讓已經很好設定的 Mplayer 更簡單。該有的功能他都有了,而且還有一點我很喜歡。當你一部影片看到一半,關掉了,不管你這之間看過什麼,下次再開,他會從你關掉、暫停的位置繼續。 PowerDVD 也有這個功能,不過 Un*x 上,還是首見! 而這個新版,又有什麼新特色呢?繁體中文沒問題了!佈景主題沒問題了!鍵盤 HotKey 沒問題了。真的很不錯!真心地再推薦一次!

設定的重點,主要是字幕部分,選擇一個喜歡的字型,然後編碼選 Big5,這樣就可以了。 "

下載網頁裡分別有包給Ubuntu 7.04,6.10,6.06使用的deb檔
SMPlayer deb檔分為Qt3沒有KDE支援,以及Qt3有KDE支援,另外還有額外佈景/圖示套件

3.2 支援realplayer
如果此時有出現「有影無聲」的情形可用下列的方式修正。
可以編輯~/.xine/catalog.cache文件,找到
[/usr/lib/xine/plugins/1.1.4/xineplug_decode_real_audio.so]
把 decoder_priority 增加到 10,至此大功告成,可以好好享受用 totem-xine 來看 rmvb 囉!
4. Office
4.1pdf中文亂碼
5. Gaim
5.1自訂圖示
在~/.gaim/smileys/下 建目錄放表情圖示
放完圖示後,在此目錄下建立名為“theme”文字檔
內容為
-----
Name=(圖示名稱)
Description=(說明)
Icon=angry.gif //---這個是註解不要加,此行是設定這個圖示集的代表符號
Author=none

/*---這段是註解不要加…
以下的格式,就是圖檔對應按鍵符號,可以用 tab 隔開也可用 space 隔開
可定義多個按鍵對應一個圖示
*/
[default]
angry.gif (><)
applaud.gif (applaud)
blank.gif (b) (B)
6. rar for linux
7.重裝OpenOffice
下載完畢後先解壓縮
$tar zvxf OOF680_m14_native_packed-1_zh-TW.9135.tar.gz
移除本來的OpenOffice
$sudo apt-get autoremove openoffice.org-core
開始安裝載來的OpenOffice
$cd OOF680_m14_native_packed-1_zh-TW.9135/DEBS
$sudo dpkg -i *.deb
建立選單捷徑
可以用滑鼠去執行desktop-integration/openoffice.org-debian-menus_2.2-9119_all.deb
可以看到所有依賴關係都已滿足或者用指令安裝
$sudo dpkg -i desktop-integration/openoffice.org-debian-menus_2.2-9119_all.deb
整個安裝過程就完畢了,執行一下看看吧,建立使用者資料後就可以用了
Logo也恢復為原來的藍色了,播個投影看看,果然不會再當掉了

UML學習筆記

開發專案可先從Funcation下手,以先瞭解需求
●Funcation View (系統應該如何運作)
1.Use case diagram =>使用案例圖描述使用者期待系統提供的特性。
系統應該提供什麼。需求功能被視為目標。再以narrative來補充,以描述各使用案例被期待完成什麼,以達到各目標。

2.Activity diagram =>描述包括連續任務、條件邏輯及一致性的程序。
利用活動圖繪製邏輯。也可用來評估應用程式的複雜度,細節複雜時,如果用活動圖畫出來,將使邏輯變好懂。

●Static View (藍圖及關係)
1.Class diagram (general )
2.Object diagram (concrete)

●Dynamic view (互動、狀態改變)
1.Squence (互動)
2. collaboration (互動)
3. statechart(object如何與外剖刺激互動,並管理內部改變)

筆記

1.圖片放法
anchor調to char
wrap調 no wrap
2.快速鍵
重覆上一步


還真是有些不方便...這筆錢還是被軟微賺定了

rar for linux

[轉貼的]要在linux下處理.rar檔,需要安裝RAR for Linux,可以從網上下載,但要記住,RAR for Linux
不是免費的;可從http://www.rarsoft.com/download.htm下載RAR for Linux 3.2.0,然後安裝:
  # tar -xzpvf rarlinux-3.2.0.tar.gz
  # cd rar
  # make
  這樣就安裝好了,安裝後就有了rar和unrar這兩個程式,rar是壓縮程式,unrar是解壓程式。它們的參數選項很多,這裏只做簡單介紹,依舊舉例說明一下其用法:
  # rar a all *.jpg
  這條命令是將所有.jpg的檔壓縮成一個rar包,名為all.rar,該程式會將.rar 副檔名將自動附加到包名後。
  # unrar e all.rar
  這條命令是將all.rar中的所有檔解壓出來

星期一, 10月 01, 2007

常用軟體

影像編輯

Google Weather API

Animaonline's Nerdy Corner: Google Weather API

This is a little guide on how to use the Google Weather API

Use this XML file for output in Fahrenheit:
http://www.google.com/ig/api?weather=Drammen //華氏 (ex. Taipei)
And this one for Celsius:
http://www.google.co.uk/ig/api?weather=Drammen //攝氏 (ex. Taipei)

And here is the sample C# parser (Celsius Version):using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Net;

///Code by Roman Alifanov - API by Google
///Posted on http://animaonline.blogspot.com
namespace GoogleWeatherAPI_Parser
{
class Program
{
static void Main(string[] args)
{
int i = 0;

//SelectNodes("xml_api_reply/weather/current_conditions")
//↑其中字串為指定哪個node,參考回傳的xml即可瞭解
XmlNodeList GWP_NodeList = GoogleWeatherAPI_Parser(@"http://www.google.co.uk/ig/api?weather=Drammen").SelectNodes("xml_api_reply/weather/current_conditions");
Console.WriteLine("Current weather in Drammen: " + GWP_NodeList.Item(i).SelectSingleNode("temp_c").Attributes["data"].InnerText);
Console.ReadLine();
}
private static XmlDocument GoogleWeatherAPI_Parser(string baseUrl)
{
HttpWebRequest GWP_Request;
HttpWebResponse GWP_Response = null;
XmlDocument GWP_XMLdoc = null;
try
{
GWP_Request = (HttpWebRequest)WebRequest.Create(string.Format(baseUrl));
GWP_Request.UserAgent = @"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4";
GWP_Response = (HttpWebResponse)GWP_Request.GetResponse();
GWP_XMLdoc = new XmlDocument();
GWP_XMLdoc.Load(GWP_Response.GetResponseStream());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
GWP_Response.Close();
return GWP_XMLdoc;
}
}

Globus Toolkit 4 安裝手冊

OS: fedora 4

... 懶得上傳...

WebBrowser處理網頁元件attribute, style及event

1.設定或取得html tag的屬性值
ex.

//set htmlDoc
HtmlDocument htmlDoc = webBrowser1.Document;

//set Element where tag's name is "Name"
HtmlElement tbUserid = htmlDoc.All["Name"];
HtmlElement tbPasswd = htmlDoc.All["Nickname"];

//set the content of tag's attribute "value"
tbUserid.SetAttribute("value", "Kevin");
tbPasswd.SetAttribute("value", "ok1234");

//get the content
String name = tbUserid.GetAttribute("value");

p.s 某些tag無法用name取得,只能用id來取得

2.設定或取得html tag的文字
hello
同上取得HtmlElement後
HtmlElement tmp = htmlDoc.All["wellcomeTag"];
tmp.SetInnerHtml("you got it") //set
tmp.GetInnerHtml() //get

p.s document如果為XML的話,得用InnerText (好像吧 哈)

3.改變Style
同上取得HtmlElement後
tmp.Style = "display: none";

4.增加onclick事性

HtmlElement imgElement1 = htmlDoc.All["PlayBall"];
if (imgElement1 != null)
{
imgElement1.AttachEventHandler("onclick", new EventHandler(imgElement1_Click));
}

//click event
private void imgElement1_Click(object sender, EventArgs e)
{
listBox1.Items.Add("let's have some fun");
}

將影片轉成SWF,FLV格式

Software: Flash Video Encoder
Company: Sothink

Formats of Output File 支援多種影像格式轉換,不支援的影像格式只需再安裝相關的軟體
便可轉成FLVand SWF 還可產生embedded HTML
也可設定輸出畫質及播放器等,相當方便。

將影片轉成FLV格式

source: http://ucsharp.wordpress.com/2007/07/25/c-and-ffmpeg/

/*
* 利用ffmpeg轉換格式
* p.s 先下載ffmpeg.exe,並放置指定位置
*/

private void MPG2FLV_Load(object sender, EventArgs e)
{
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.EnableRaisingEvents = false;
proc.StartInfo.FileName = @"C:\edgar\mediaHandler\ffmpeg\ffmpeg";
proc.StartInfo.Arguments = "-i C:\\edgar\\mediaHandler\\ffmpeg\\1.mpg -ar 22050 -ab 32 -f flv -s 320×240 -aspect 4:3 -y movie4.flv";

/* use /y to overwrite if there it exists already or will fail */

proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.Start();
proc.WaitForExit();
proc.Close();
}

利用C#程式碼列印

/*
* 為 PrintDocument 增加PrintPageEventHandler事件handler
*/

private void btnPrint_Click(object sender, EventArgs e)
{
PrintDocument printDoc = new PrintDocument();
printDoc.PrintPage += new PrintPageEventHandler(printDoc_PrintPage);

//if print() is invoked, the event printDoc_PrintPage will be called.
printDoc.Print();

}
public void printDoc_PrintPage(object sender, PrintPageEventArgs e)
{
Point ulCorner = new Point(300, 300);//location
e.Graphics.DrawImage(pictureBox1.Image, ulCorner);
}

在圖片上畫圖

範例:在圖上畫路徑
/*
* 在圖片上畫路徑,最後利用pictureBox存檔
*/
1.先設定繪畫
String pictureFileName=@"C:\picture.jpg";
String saveFileName=@"C:\test.jpg";

//set grapthic tool on specific image
Graphics graphics = Graphics.FromImage(pictureFileName);

//set a path
GraphicsPath path;
path = new GraphicsPath(new Point[]{ new Point(285, 315),new Point(190, 150),new Point(85, 120), new Point(80, 60),new Point(95, 80)},
new byte[] {(byte)PathPointType.Start,(byte)PathPointType.Line,(byte)PathPointType.Line,(byte)PathPointType.Line,(byte)PathPointType.Line });
graphics.DrawPath(Pens.Blue, path);

//save the grpahic
graphics.Save(saveFileName);