搜尋此網誌

2009年5月19日 星期二

















Bitmap ^bmp1;
Bitmap ^bmp2;

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
// 開啟
openFileDialog1->Filter = "影像檔(*.bmp)|*.bmp|所有檔案(*.*)|*.*";
openFileDialog1->FilterIndex = 1;
openFileDialog1->RestoreDirectory = true;
openFileDialog1->DefaultExt = ".bmp|.jpg|";
if(openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK && openFileDialog1->FileName->Length > 0 )
pictureBox1->Image =Image::FromFile(openFileDialog1->FileName); // 讀取影像
String^ str1 = openFileDialog1->FileName;
bmp1= gcnew Bitmap(str1);
}

private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
//負片效果
int i,j;
Color rgb,rgb1;
Byte R1,G1,B1;
bmp2 = gcnew Bitmap(pictureBox1->Width,pictureBox1->Height);
for(j=0;j<>Height;j++)
for(i=0;i<>Width;i++)
{
rgb=bmp1->GetPixel(i,j); // 讀取原影像每一點像素
// RGB分解
R1=rgb.R;
G1=rgb.G;
B1=rgb.B;
//負片方法
bmp2->SetPixel(i,j,Color::FromArgb(255-R1,255-G1,255-B1));// 存每一點處理後像素至另一影像
}
pictureBox2->Image= bmp2;
}

2009年5月1日 星期五

bX-r1ezpk

剛剛在修改Blog文章要檢視網誌時出現bX-r1ezpk的錯誤訊息...
因為在發生錯誤訊息之前有修改版面配置的HTML

下圖就是我為了highlight程式碼而必須加入的HTML
















我先將原本加入的程式碼刪除儲存後就回復正常了...
後來再重新回到版面配置修改HTML又可以了...

C# Image to CSV





















這是一張10x10 pixel的點陣圖,我將它利用Photoshop放大成3200%















這個CSV檔是由上圖所讀取出來的,0代表黑色,255代表白色

以觀念來說這個CSV檔裡的數值是表示最上面那張10x10的圖沒錯

為了好看我用較好理解的寫法實現它,C#寫法如下:

//開啟圖至pictureBox1
private void btnOpen_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "BMP(*.BMP)|*.bmp|" + "所有檔案|*.*";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
pictureBox1.Width = Image.FromFile(openFileDialog.FileName).Width;
pictureBox1.Height = Image.FromFile(openFileDialog.FileName).Height;
pictureBox1.Image = Image.FromFile(openFileDialog.FileName);
}
}


因為是黑白影像,這邊我只對R讀取。


private void btnProcess_Click(object sender, EventArgs e)
{
FileStream fw = new FileStream( @"c:\r.csv", FileMode.Open);
StreamWriter sw = new StreamWriter(fw, System.Text.Encoding.Default);
string str;
Bitmap p1 = (Bitmap)pictureBox1.Image;
int[,] r = new int[p1.Height, p1.Width];
int[,] g = new int[p1.Height, p1.Width];
int[,] b = new int[p1.Height, p1.Width];

for (int i = 0; i < p1.Height; i++)
{
for (int j = 0; j < p1.Width; j++)
{
r[i, j] = p1.GetPixel(j, i).R;
if (j < p1.Width )
{
//最後一個值後面不用逗號
if (j == p1.Width -1)
{
str = r[i, j] + "";
sw.Write(str);
}
else
{
str = r[i, j] + ",";
sw.Write(str);
}
}
}
//換行繼續下一個j迴圈寫入
sw.Write('\n');
}
sw.Flush();
fw.Close();
MessageBox.Show("執行完畢");
}





範例檔下載