tara1367
یک شنبه 23 شهریور 1393, 14:16 عصر
سلام دوستان
من در برنامم با 2 روش عکس رو درون دیتابیس ذخیره می کنم. 1 - ضمیمه کردن عکس (انتخاب عکس از هارد با پنجره OpenFileDialog )
2 - اسکن عکس
با روش 1 که هیچ مشکلی ندارم ، عکس از پنجره OpenFileDialog انتخاب شده ، در pictureBox نمایش داده میشه و در نهایت در دیتابیس ذخیره میشه.
اما در روش 2 بعد از اسکن شدن که عکس درون pictureBox قرار میگیره در هنگام ذخیره این ارور رو میده:
Value cannot be null. Parameter name : encoder
که داره از خطی که میخواد عکس درون pictureBox رو بخونه ایراد می گیره. در صورتی که pictureBox خالی نیست!
کد مربوط به خواندن عکس اسکن شده در pictureBox :
private void VSTwain1_ImageAcquired(object sender, EventArgs e)
{
if (pictureBox1.Image != null)
{
pictureBox1.Image.Dispose();
pictureBox1.Image = null;
}
pictureBox1.Image = VSTwain1.GetCurrentImage();
}
private void buttonX1_Click(object sender, EventArgs e)
{
try
{
if (!VSTwain1.IsTwainAvailable)
{
if (VSTwain1.IsTwain2Compatible)
{
if (MessageBox.Show("TWAIN 2.0 Data Source Manager (TWAINDSM.DLL) is not found!" +
Environment.NewLine +
Environment.NewLine +
"Do you want to use TWAIN 1.x Data Source Manager (TWAIN_32.DLL) ?",
"Start Device",
MessageBoxButtons.YesNo) == DialogResult.Yes)
{
chkTwain2Compatible.Checked = false;
VSTwain1.IsTwain2Compatible = false;
}
else
return;
}
}
VSTwain1.StartDevice();
VSTwain1.ShowUI = chkShowUI.Checked;
VSTwain1.ModalUI = chkModalUI.Checked;
VSTwain1.ShowIndicators = chkShowIndicators.Checked;
VSTwain1.DisableAfterAcquire = chkDisableAfterAcq.Checked;
VSTwain1.AutoCleanBuffer = chkAutoCleanBuffer.Checked;
if (chkShowSelector.Checked)
{
if (VSTwain1.SelectSource())
VSTwain1.Acquire();
}
else
VSTwain1.Acquire();
}
catch (Vintasoft.Twain.TwainException ex)
{
MessageBox.Show(ex.Message);
}
}
کد مربوط به ذخیره عکس درون pictureBox در دیتابیس:
private void btnsave_Click(object sender, EventArgs e)
{
try
{
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
byte[] arrPic = ms.GetBuffer();
ms.Close();
string strPName = "";
if (rbtnScan.Checked == true)
strPName = textBoxX1.Text;
if (rbtnZamime.Checked == true)
strPName = txtZPicName.Text;
SqlCommand cmd = new SqlCommand("INSERT INTO TScan (UserId,PName,Company,PGroup,PDate," +
"PicName,Pic,Des) VALUES('" + txtId.Text + "','" + txtFname.Text + ' ' + txtLname.Text +
"','" + cmbCompanyName.Text + "','" + cmbGroup.Text + "','" +
codes.MergeTexboxesForDate(txtday, txtmonth, txtyear) + "',@PicName,@Pic,'" + txtDes.Text + "')",
conn = new SqlConnection(codes.ReturnConnectionstring()));
//cmd.Parameters.Add("@FCode", SqlDbType.Int).Value = sttCode;
cmd.Parameters.Add("@PicName", SqlDbType.NVarChar, 400).Value = strPName;
cmd.Parameters.Add("@Pic", SqlDbType.VarBinary).Value = arrPic;
conn.Open();
cmd.ExecuteNonQuery();
MessageBox.Show("ضمیمه ثبت گردید");
ShowData();
conn.Close();
}
catch (SystemException ex)
{
MessageBox.Show(ex.Message);
}
}
کد مربوط به خواندن عکس از روی هارد :
OpenFileDialog dlgOpen = new OpenFileDialog();
dlgOpen.Filter =
"Image Files(*.BMP;*.JPG;*.GIF;*.JPEG)|*.BMP;*.JPG;*.GIF; *.JPEG";
dlgOpen.Title = "انتخاب تصوير";
if (dlgOpen.ShowDialog() == DialogResult.OK)
{
pictureBox1.Image = Image.FromFile(dlgOpen.FileName);
string FilePath = dlgOpen.FileName;
strFileName = Path.GetFileName(FilePath);
txtZPicName.Text = strFileName;
}
من فقط در ذخیره عکس اسکن شده که در pictureBox هست مشکل دارم. ممنون میشم اگر کسی میدونه راهنمایی کنه.
با سپاس
من در برنامم با 2 روش عکس رو درون دیتابیس ذخیره می کنم. 1 - ضمیمه کردن عکس (انتخاب عکس از هارد با پنجره OpenFileDialog )
2 - اسکن عکس
با روش 1 که هیچ مشکلی ندارم ، عکس از پنجره OpenFileDialog انتخاب شده ، در pictureBox نمایش داده میشه و در نهایت در دیتابیس ذخیره میشه.
اما در روش 2 بعد از اسکن شدن که عکس درون pictureBox قرار میگیره در هنگام ذخیره این ارور رو میده:
Value cannot be null. Parameter name : encoder
که داره از خطی که میخواد عکس درون pictureBox رو بخونه ایراد می گیره. در صورتی که pictureBox خالی نیست!
کد مربوط به خواندن عکس اسکن شده در pictureBox :
private void VSTwain1_ImageAcquired(object sender, EventArgs e)
{
if (pictureBox1.Image != null)
{
pictureBox1.Image.Dispose();
pictureBox1.Image = null;
}
pictureBox1.Image = VSTwain1.GetCurrentImage();
}
private void buttonX1_Click(object sender, EventArgs e)
{
try
{
if (!VSTwain1.IsTwainAvailable)
{
if (VSTwain1.IsTwain2Compatible)
{
if (MessageBox.Show("TWAIN 2.0 Data Source Manager (TWAINDSM.DLL) is not found!" +
Environment.NewLine +
Environment.NewLine +
"Do you want to use TWAIN 1.x Data Source Manager (TWAIN_32.DLL) ?",
"Start Device",
MessageBoxButtons.YesNo) == DialogResult.Yes)
{
chkTwain2Compatible.Checked = false;
VSTwain1.IsTwain2Compatible = false;
}
else
return;
}
}
VSTwain1.StartDevice();
VSTwain1.ShowUI = chkShowUI.Checked;
VSTwain1.ModalUI = chkModalUI.Checked;
VSTwain1.ShowIndicators = chkShowIndicators.Checked;
VSTwain1.DisableAfterAcquire = chkDisableAfterAcq.Checked;
VSTwain1.AutoCleanBuffer = chkAutoCleanBuffer.Checked;
if (chkShowSelector.Checked)
{
if (VSTwain1.SelectSource())
VSTwain1.Acquire();
}
else
VSTwain1.Acquire();
}
catch (Vintasoft.Twain.TwainException ex)
{
MessageBox.Show(ex.Message);
}
}
کد مربوط به ذخیره عکس درون pictureBox در دیتابیس:
private void btnsave_Click(object sender, EventArgs e)
{
try
{
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
byte[] arrPic = ms.GetBuffer();
ms.Close();
string strPName = "";
if (rbtnScan.Checked == true)
strPName = textBoxX1.Text;
if (rbtnZamime.Checked == true)
strPName = txtZPicName.Text;
SqlCommand cmd = new SqlCommand("INSERT INTO TScan (UserId,PName,Company,PGroup,PDate," +
"PicName,Pic,Des) VALUES('" + txtId.Text + "','" + txtFname.Text + ' ' + txtLname.Text +
"','" + cmbCompanyName.Text + "','" + cmbGroup.Text + "','" +
codes.MergeTexboxesForDate(txtday, txtmonth, txtyear) + "',@PicName,@Pic,'" + txtDes.Text + "')",
conn = new SqlConnection(codes.ReturnConnectionstring()));
//cmd.Parameters.Add("@FCode", SqlDbType.Int).Value = sttCode;
cmd.Parameters.Add("@PicName", SqlDbType.NVarChar, 400).Value = strPName;
cmd.Parameters.Add("@Pic", SqlDbType.VarBinary).Value = arrPic;
conn.Open();
cmd.ExecuteNonQuery();
MessageBox.Show("ضمیمه ثبت گردید");
ShowData();
conn.Close();
}
catch (SystemException ex)
{
MessageBox.Show(ex.Message);
}
}
کد مربوط به خواندن عکس از روی هارد :
OpenFileDialog dlgOpen = new OpenFileDialog();
dlgOpen.Filter =
"Image Files(*.BMP;*.JPG;*.GIF;*.JPEG)|*.BMP;*.JPG;*.GIF; *.JPEG";
dlgOpen.Title = "انتخاب تصوير";
if (dlgOpen.ShowDialog() == DialogResult.OK)
{
pictureBox1.Image = Image.FromFile(dlgOpen.FileName);
string FilePath = dlgOpen.FileName;
strFileName = Path.GetFileName(FilePath);
txtZPicName.Text = strFileName;
}
من فقط در ذخیره عکس اسکن شده که در pictureBox هست مشکل دارم. ممنون میشم اگر کسی میدونه راهنمایی کنه.
با سپاس