Я полагаю, вы ищете capture_continuous
.
Вот общий процесс:
from picamera.array import PiRGBArray
from picamera import PiCamera
import time
import cv2
# initialize the camera and grab a reference to the raw camera capture
camera = PiCamera()
camera.resolution = (640, 480)
camera.framerate = 32
rawCapture = PiRGBArray(camera, size=(640, 480))
# allow the camera to warmup
time.sleep(0.1)
# capture frames from the camera
for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True):
image = frame.array
# show the frame
cv2.imshow("Frame", image)
key = cv2.waitKey(1) & 0xFF
# clear the stream in preparation for the next frame
rawCapture.truncate(0)
# if the `q` key was pressed, break from the loop
if key == ord("q"):
break
Большую часть времени люди хотят имена, не ints. Вы могли добавить свойство контейнера для цели?
[XmlIgnore]
public MyEnum Foo {get;set;}
[XmlElement("Foo")]
[EditorBrowsable(EditorBrowsableState.Never), Browsable(false)]
public int FooInt32 {
get {return (int)Foo;}
set {Foo = (MyEnum)value;}
}
Или Вы могли использовать IXmlSerializable
, но это - большая работа.
См. полную программу Консольного приложения в качестве примера ниже для интересного способа достигнуть того, что Вы ищете использование DataContractSerializer:
using System;
using System.IO;
using System.Runtime.Serialization;
namespace ConsoleApplication1
{
[DataContract(Namespace="petermcg.wordpress.com")]
public class Request
{
[DataMember(EmitDefaultValue = false)]
public RequestType request;
}
[DataContract(Namespace = "petermcg.wordpress.com")]
public enum RequestType
{
[EnumMember(Value = "1")]
Booking = 1,
[EnumMember(Value = "2")]
Confirmation = 2,
[EnumMember(Value = "4")]
PreBooking = 4,
[EnumMember(Value = "5")]
PreBookingConfirmation = 5,
[EnumMember(Value = "6")]
BookingStatus = 6
}
class Program
{
static void Main(string[] args)
{
DataContractSerializer serializer = new DataContractSerializer(typeof(Request));
// Create Request object
Request req = new Request();
req.request = RequestType.Confirmation;
// Serialize to File
using (FileStream fileStream = new FileStream("request.txt", FileMode.Create))
{
serializer.WriteObject(fileStream, req);
}
// Reset for testing
req = null;
// Deserialize from File
using (FileStream fileStream = new FileStream("request.txt", FileMode.Open))
{
req = serializer.ReadObject(fileStream) as Request;
}
// Writes True
Console.WriteLine(req.request == RequestType.Confirmation);
}
}
}
содержание request.txt следующим образом после вызова к WriteObject:
<Request xmlns="petermcg.wordpress.com" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<request>2</request>
</Request>
Вам будет нужна ссылка на блок System.Runtime.Serialization.dll для DataContractSerializer.
Смотрите на Систему. Класс Enum. Метод Синтаксического анализа преобразовывает строку или международное представление в Перечислимый объект, и метод ToString преобразовывает Перечислимый объект в строку, которая может быть сериализирована.
Самый простой способ - использовать атрибут [XmlEnum] примерно так:
[Serializable]
public enum EnumToSerialize
{
[XmlEnum("1")]
One = 1,
[XmlEnum("2")]
Two = 2
}
Это будет сериализовано в XML (скажем, что родительский класс - это CustomClass) примерно так:
<CustomClass>
<EnumValue>2</EnumValue>
</CustomClass>