|
|
|
C# ทำยังไง ให้กล้อง Capture ภาพ ทุก 3 วินาทีคะ ช่วยหน่อยนะคะ ^^ |
|
|
|
|
|
|
|
ใช้ timer ตั้งเวลาไว้ (interval) 3000 มิลลิเซค = 3 วิ
แล้วให้ event tick สั่งให้ capture รูป
|
|
|
|
|
Date :
2010-04-03 09:04:53 |
By :
tungman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แล้ว การcapture ภาพให้เป็น 2 ชื่อ แล้ววนทับไปเรื่อยๆ ทำยังไงดีคะ วินาทีที่ 3 บันทักในชื่อ a.jpg วินาทีที่ 6 ชื่อ b.jpg วินาทีที่ 9 ชื่อ a.jpg วินาทีที่ 12 ชื่อ b.jpg
เพื่อจะนำ a กับ b ไปหาความแตกต่างต่อไป ทำแบบนี้ไปเรื่อยๆ จนกว่าจะกดปุ่ม stop จะต้องเขียนโด้ดยังไงคะ
|
|
|
|
|
Date :
2010-04-03 16:25:43 |
By :
Takezeed |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลองใช้ array ดูก็ได้ครับ หรือจะ For เอาก็น่าจะได้
|
|
|
|
|
Date :
2010-04-26 11:21:32 |
By :
iheerman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อธิบายก่อนว่า
การ Loop ด้วย โปรแกรม ก็เอ๋อหร๋อ แบบนี้ละครับ เพราะช่วงเวลา 3 วินาที อาจจะทำให้ system เรา save รูปไม่ทัน แล้ว Loop มันชนกันเอง หมายถึง งานเก่ายัง save รูปลง Hard disk ไม่เสร็จ งานใหม่มาอีก Loop แล้ว (มี IO lock Open/Read/Write ด้วยน่ะ วุ่นวายมากๆ)
1. ใช้ Timer ก็ดีครับ แต่ก็จะ error คล้ายๆ เดิม ถ้า เป็นที่ IO ของ hard disk อีกนะครับ เพียงแต่ดีขึ้นหน่อยตรงที่ มันเริ่มเป็น thread แยกแล้ว มันจะไม่ชนกันกับ loop เก่า
2. ไม่จะเป็น ไม่ต้องเก็บรูปลง Hard disk ได้หรือไม่ ใช้ memory stream เอาดีกว่า เร็วกว่าเยอะครับ ลองไปศึกษาดูก่อน
3. คุณ save รูปลง Hard disk แล้วไป read จาก hard disk มาเปรียบเทียบกับรูปเก่า มันก็ช้าลง อย่างน้อย 2 เท่าแล้ว ใช้ memory stream ดีกว่าครับ
ผมแค่สังเกตโปรแกรมคุณเท่านั้นครับ ที่คาดว่าจะ มี error แบบนี้ ลองหรับเปลี่ยนใหม่ดูครับ ลอง post code มาดูครับ
|
|
|
|
|
Date :
2010-04-27 11:52:52 |
By :
numenoy |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณ คุณ numenoy มากนะค่ะ สำหรับการแนะนำ พอดีหาตัวอย่าง การเซฟรูปแบบ memory stream
แต่มันจะเป็นการเลือกไดอะล็อก เราจะทำให้มันบันทึก แบบอัตโนมัติ ลง c:\\ Image1.jpg ได้ยังไงคะ
Code (C#)
public static void SaveImageCapture(System.Drawing.Image image)
{
SaveFileDialog s = new SaveFileDialog();
s.FileName = "Image"; // Default file name
s.DefaultExt = ".Jpg"; // Default file extension
s.Filter = "Image (.jpg)|*.jpg"; // Filter files by extension
// Show save file dialog box
// Process save file dialog box results
if (s.ShowDialog()==DialogResult.OK)
{
// Save Image
s.FileName = new FileName();
s.FileName = "Image";
string filename = s.FileName;
FileStream fstream = new FileStream(filename, FileMode.Create);
image.Save(fstream, System.Drawing.Imaging.ImageFormat.Jpeg);
fstream.Close();
}
}
|
|
|
|
|
Date :
2010-04-29 03:14:44 |
By :
Takezeed |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (C#)
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
namespace CameraViewer.Tools
{
public class ImageProcessing
{
public static Image LoadImage()
{
Image image = null;
using (System.Windows.Forms.OpenFileDialog op = new System.Windows.Forms.OpenFileDialog())
{
op.Title = "Open Image File";
op.Filter = "JPEG Documents (*.jpg)|*.jpg|BMP Documents (*.bmp)|*.bmp|Gif Files|*.gif";
if (op.ShowDialog() == System.Windows.Forms.DialogResult.OK && !string.IsNullOrEmpty(op.FileName) && System.IO.File.Exists(op.FileName))
{
image = LoadImage(op.FileName);
}
else return image;
}
return image;
}
public static Image LoadImage(string filePath)
{
Image image = null;
byte[] bArrImage = new byte[0];
try
{
// convert Image to byte array and save in
System.IO.FileStream fsImage = null;
fsImage = System.IO.File.Open(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read);
bArrImage = new byte[fsImage.Length];
fsImage.Read(bArrImage, 0, (int)fsImage.Length);
fsImage.Close();
System.IO.MemoryStream ms = new System.IO.MemoryStream(bArrImage);
image = Image.FromStream(ms);
ms.Dispose();
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message, "Error Storing Image");
}
return image;
}
public static Bitmap ResizeBitmap(Bitmap b, int nWidth, int nHeight)
{
Bitmap result = new Bitmap(nWidth, nHeight);
using (Graphics g = Graphics.FromImage((Image)result))
g.DrawImage(b, 0, 0, nWidth, nHeight);
return result;
}
//Generate new image dimensions
public static Size GenerateImageDimensions(int currW, int currH, int destW, int destH)
{
//double to hold the final multiplier to use when scaling the image
double multiplier = 0;
//string for holding layout
string layout;
//determine if it's Portrait or Landscape
if (currH > currW) layout = "portrait";
else layout = "landscape";
switch (layout.ToLower())
{
case "portrait":
//calculate multiplier on heights
if (destH > destW)
{
multiplier = (double)destW / (double)currW;
}
else
{
multiplier = (double)destH / (double)currH;
}
break;
case "landscape":
//calculate multiplier on widths
if (destH > destW)
{
multiplier = (double)destW / (double)currW;
}
else
{
multiplier = (double)destH / (double)currH;
}
break;
}
//return the new image dimensions
return new Size((int)(currW * multiplier), (int)(currH * multiplier));
}
}
}
ลองดูก่อนแล้วกันครับ
ถ้าจะ load รูปจาก file จริงๆ ก็เอา class นี้ไปใช้ ลองศึกษาดู
ถ้าจะใช้ memory stream ใน class นี้ก็มีตัวอย่างการใช้อยู่ ลองแปลงดูครับ ผมคิดว่ารูปที่คุณได้จากกล้องมา มันน่าจะเป็น byte[] อยู่แล้ว
เรื่องแปลงไปใช้ memory stream คงไม่ยากเกินไปครับ
|
|
|
|
|
Date :
2010-04-29 10:30:13 |
By :
numenoy |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คือผมศึกษาว่าจะทำงัยให้มันติดต่อกับกล้อง webcam ด้วย c# ผมลองดูโคตรค้างบนมันมีสวนไหนอะครับที่จะให้ติดต่อกับกล้องผมไม่รู้จะติดต่อยังงัยให้กล้อง webcam สามารถ รัน บน c# ได้ ช่วยหน่อย นะครับขอบคุณครับ
|
|
|
|
|
Date :
2011-02-10 05:28:57 |
By :
samsungbkd |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้าติดต่อกล้อง webcam ได้แล้ว ต้องเขียนโปรแกรมยังไงถึงจะเรียก code ข้างบนได้คะ
|
|
|
|
|
Date :
2011-11-13 11:50:06 |
By :
noonn |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|