先建立Picturebox1和Picturebox2和滑桿物件Trackbox1
為了不破壞原圖達成順利調整透明度,才建立第2個(不顯示),方便作業
透明度為-255 ~ +255
Bitmap BMP = new Bitmap(pictureBox2.Image);
int brightness = trackBar1.Value; //抓滑桿的值
for(int y = 0; y < BMP.Height; y++)
{
for(int x = 0; x < BMP.Width; x++)
{
var pixel = BMP.GetPixel(x, y); //取得圖片的pixel資訊
var pixelR = ((pixel.R + brightness > 255) ? 255 : (pixel.R + brightness)) < 0 ? 0 : ((pixel.R + brightness > 255) ? 255 : (pixel.R + brightness));
var pixelG = ((pixel.G + brightness > 255) ? 255 : (pixel.G + brightness)) < 0 ? 0 : ((pixel.G + brightness > 255) ? 255 : (pixel.G + brightness));
var pixelB = ((pixel.B + brightness > 255) ? 255 : (pixel.B + brightness)) < 0 ? 0 : ((pixel.B + brightness > 255) ? 255 : (pixel.B + brightness));
Color newColor = Color.FromArgb(pixel.A, pixelR, pixelG, pixelB); //把這個pixel的修改後資訊寫回
BMP.SetPixel(x, y, newColor);
}
}
pictureBox1.Image = BMP;
先建立個bitmap物件處理,抓取pixel資訊將RGB資訊計算出來
若超過255則設為255,若低於0則設為0
再把計算結果放到picturebox1
設定一個先存入原圖避免每次picturebox1的圖每次更動每次都被破壞數值,暫存使用
2019年11月26日 星期二
FileDialog設定Filter
Filter屬性
只需要圖片的話可以填成
Image Files (*.bmp; *.jpg)|*.bmp;*.jpg
若是分類加上所有檔案的話可以寫成
Image Files (*.bmp; *.jpg)|*.bmp;*.jpg|Text Files (*.txt)|*.txt |All Files |*.*
前面是顯示描述,後面是檔名表示,多個檔名則用分號分開
中間不要用空格分隔會跑掉!
只需要圖片的話可以填成
Image Files (*.bmp; *.jpg)|*.bmp;*.jpg
若是分類加上所有檔案的話可以寫成
Image Files (*.bmp; *.jpg)|*.bmp;*.jpg|Text Files (*.txt)|*.txt |All Files |*.*
前面是顯示描述,後面是檔名表示,多個檔名則用分號分開
中間不要用空格分隔會跑掉!
2019年11月24日 星期日
利用OpenFileDialog讀取圖片
先拉OpenFileDialog和Picturebox物件
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
string str = openFileDialog1.FileName;
pictureBox1.Image = Image.FromFile(str);
}
先跳出檔案對話盒,如果有選取就執行,取消就不執行
先宣告字串str把檔案名字存進去
再把pictureBox1的Image放入你選取的檔案
◎調整成符合視窗大小
屬性中的SizeMode改成StretchImage
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
string str = openFileDialog1.FileName;
pictureBox1.Image = Image.FromFile(str);
}
先跳出檔案對話盒,如果有選取就執行,取消就不執行
先宣告字串str把檔案名字存進去
再把pictureBox1的Image放入你選取的檔案
◎調整成符合視窗大小
屬性中的SizeMode改成StretchImage
抓取滑鼠所在座標
使用Form的OnMouseMove事件
int x, y;
x = e.Location.X;
y = e.Location.Y;
抓取滑鼠的XY座標
再自行用輸出方式顯示(Label、TextBox、toolStripStatusLabel等)
int x, y;
x = e.Location.X;
y = e.Location.Y;
抓取滑鼠的XY座標
再自行用輸出方式顯示(Label、TextBox、toolStripStatusLabel等)
計算小數點
將TrackBar的數值轉成小數點
double change = Math.Round((double)trackBar1.Value / 100,2);
先宣告double型態(或其他小數點型態)
因為兩個整數型態相除不會顯示小數點,所以得強制把其中一邊轉換成非int
避免小數點位數太多所以利用Math.Round設定位數,2則只顯示到小數點後面第二位
double change = Math.Round((double)trackBar1.Value / 100,2);
先宣告double型態(或其他小數點型態)
因為兩個整數型態相除不會顯示小數點,所以得強制把其中一邊轉換成非int
避免小數點位數太多所以利用Math.Round設定位數,2則只顯示到小數點後面第二位
colorDialog物件
拉調色盤物件colorDialog
呼叫調色盤物件並將顏色傳回:
if (colorDialog1.ShowDialog() != DialogResult.Cancel)
{
BackColor = colorDialog1.Color;
}
呼叫調色盤物件並將顏色傳回:
if (colorDialog1.ShowDialog() != DialogResult.Cancel)
{
BackColor = colorDialog1.Color;
}
DateTimePicker物件相關
比較不熟這物件,備忘用
◎抓取年月日
dateTimePicker1.Value.Year
dateTimePicker1.Value.Month
dateTimePicker1.Value.Day
◎增加年月日數
dateTimePicker1.Value.AddYears(int);
dateTimePicker1.Value.AddMonths(int);
dateTimePicker1.Value.AddDays(int);
其他想到再加
◎抓取年月日
dateTimePicker1.Value.Year
dateTimePicker1.Value.Month
dateTimePicker1.Value.Day
◎增加年月日數
dateTimePicker1.Value.AddYears(int);
dateTimePicker1.Value.AddMonths(int);
dateTimePicker1.Value.AddDays(int);
其他想到再加
儲存狀態 & 顏色
◎儲存特定某些變數供程式關閉後下次開啟使用的方法
※以更改儲存背景顏色為例:
尋找要儲存的變數
背景顏色的話則是BackColor
先到母物件Form1底下的ApplicationSettings→PropertyBinding選擇要更改的BackColor
按右邊的箭號,新增,定義名稱為BKColor,可先設定現行顏色
顏色做好變更後再補上一行把這顏色定義存檔供下次開啟載入使用:
Properties.Settings.Default.Save();
※以更改儲存背景顏色為例:
尋找要儲存的變數
背景顏色的話則是BackColor
先到母物件Form1底下的ApplicationSettings→PropertyBinding選擇要更改的BackColor
按右邊的箭號,新增,定義名稱為BKColor,可先設定現行顏色
顏色做好變更後再補上一行把這顏色定義存檔供下次開啟載入使用:
Properties.Settings.Default.Save();
這樣就會把儲存設定存起來了
◎顏色預設
C#的底色預設值為系統→Control
用程式碼控制則為
Color.FromKnownColor(KnownColor.Control);
尋找兩個日期的間隔
◎直接套用C#的函式,計算兩個日期差(只能計算純天數)
TimeSpan span = dateTimePicker2.Value - dateTimePicker1.Value;
int diffDays = Convert.ToInt32(span.Days);
※宣告TimeSpan形式來計算兩者的天數差,取日期則用dateTimePicker物件抓值
如果想抓今天的日期則可以使用
DateTime.Now;
除了抓今天日期外還可以抓到現在是幾點幾分幾秒(因為C#只有DateTime沒有DATE)
TimeSpan span = dateTimePicker2.Value - dateTimePicker1.Value;
int diffDays = Convert.ToInt32(span.Days);
※宣告TimeSpan形式來計算兩者的天數差,取日期則用dateTimePicker物件抓值
如果想抓今天的日期則可以使用
DateTime.Now;
除了抓今天日期外還可以抓到現在是幾點幾分幾秒(因為C#只有DateTime沒有DATE)
日期格式相關
◎改變日期顯示方式
由於C#只有DATETIME型態,有時候不想顯示分秒只想顯示年月日的時候
列印時可以修改輸出格式
例如:
DateTime DT1;
TextBox1.Text = DT1.ToString(yyyy/MM/dd);
※MM要大寫,mm是分鐘這樣會錯誤
◎輸出使用民國年顯示
var datetime1 = new DateTime(year, month, day);
var taiwanCalender = new System.Globalization.TaiwanCalendar();
var datetime2 = string.Format("民國 {0}年 {1}月 {2}日",taiwanCalender.GetYear(datetime1),datetime1.Month,datetime1.Day);
※宣告一個datetime1,輸入年月日資訊
※宣告taiwanCalender,呼叫民國曆格式
※宣告datetime2輸出民國曆格式用,string.Format重新宣告格式,只改民國年,使用此法可以避免直接-1911年出現的少數錯誤bug(直接取年-1911也可以,但不能直接用AddYear(-1911))
由於C#只有DATETIME型態,有時候不想顯示分秒只想顯示年月日的時候
列印時可以修改輸出格式
例如:
DateTime DT1;
TextBox1.Text = DT1.ToString(yyyy/MM/dd);
※MM要大寫,mm是分鐘這樣會錯誤
◎輸出使用民國年顯示
var datetime1 = new DateTime(year, month, day);
var taiwanCalender = new System.Globalization.TaiwanCalendar();
var datetime2 = string.Format("民國 {0}年 {1}月 {2}日",taiwanCalender.GetYear(datetime1),datetime1.Month,datetime1.Day);
※宣告一個datetime1,輸入年月日資訊
※宣告taiwanCalender,呼叫民國曆格式
※宣告datetime2輸出民國曆格式用,string.Format重新宣告格式,只改民國年,使用此法可以避免直接-1911年出現的少數錯誤bug(直接取年-1911也可以,但不能直接用AddYear(-1911))
呼叫新的form,傳值
◎建立一個新的Form2視窗
新建立的Form的屬性設定:
禁止最大化:MaximizeBox→False
禁止最小化:MinimizeBox→False
禁止調整大小:FormBorderStyle→FixSingle
在Form1中觸發呼叫事件,先建立一個新的Form2物件再做呼叫:
Form2 transparency1 = new Form2();
transparency1.ShowDialog();
※transparency1為新設定的物件名稱
※不用ShowDialog改用Show也可以
◎Form1傳值給Form2使用
※Form1內
Form2 F2 = new Form2();
F2.Owner = this; //Form2的指標指向Form1
F2.TextBox1.Text = "傳值到F2";
F2.ShowDialog();
◎Form2傳值給Form1使用
※Form1內
Form2 F2 = new Form2();
F2.Owner = this; //Form2的指標指向Form1
F2.ShowDialog();
※Form2內
Form1 F1 = (Form1)this.Owner; //把Form2的父窗口指標給Form1
新建立的Form的屬性設定:
禁止最大化:MaximizeBox→False
禁止最小化:MinimizeBox→False
禁止調整大小:FormBorderStyle→FixSingle
在Form1中觸發呼叫事件,先建立一個新的Form2物件再做呼叫:
Form2 transparency1 = new Form2();
transparency1.ShowDialog();
※transparency1為新設定的物件名稱
※不用ShowDialog改用Show也可以
◎Form1傳值給Form2使用
※Form1內
Form2 F2 = new Form2();
F2.Owner = this; //Form2的指標指向Form1
F2.TextBox1.Text = "傳值到F2";
F2.ShowDialog();
◎Form2傳值給Form1使用
※Form1內
Form2 F2 = new Form2();
F2.Owner = this; //Form2的指標指向Form1
F2.ShowDialog();
※Form2內
Form1 F1 = (Form1)this.Owner; //把Form2的父窗口指標給Form1
F1.Opacity = change;
this.Close();
關閉視窗
◎只關閉新開的視窗:
this.Close();
this.Close();
◎要把整個程式關閉:
this.Close();
Environment.Exit(Environment.ExitCode);
InitializeComponent();
InitializeComponent();
開發環境
採用環境:
Visual Studio 2019 (C# Winform)
Mysql 8.0 (配合Workbench 8.0)
基本上紀錄一下程式寫法備忘用
盡可能寫成比較簡單好理解的方式
有的可能比較基本
有的可能會用比較笨的寫法
Visual Studio 2019 (C# Winform)
Mysql 8.0 (配合Workbench 8.0)
基本上紀錄一下程式寫法備忘用
盡可能寫成比較簡單好理解的方式
有的可能比較基本
有的可能會用比較笨的寫法
訂閱:
意見 (Atom)