internal static EosFocusPoint Create(Edsdk.EdsFocusPoint focusPoint) { return new EosFocusPoint { Bounds = new Rectangle { X = focusPoint.rect.x, Y = focusPoint.rect.y, Height = focusPoint.rect.height, Width = focusPoint.rect.width, }, IsInFocus = focusPoint.justFocus != 0, IsSelected = focusPoint.selected != 0, IsValid = focusPoint.valid != 0, }; }
internal static EosFocus Create(Edsdk.EdsFocusInfo focus) { var focusPoints = new EosFocusPoint[focus.pointNumber]; for (var i = 0; i < focusPoints.Length; ++i) focusPoints[i] = EosFocusPoint.Create(focus.focusPoint[i]); return new EosFocus { Bounds = new Rectangle { X = focus.imageRect.x, Y = focus.imageRect.y, Height = focus.imageRect.height, Width = focus.imageRect.width, }, ExecuteMode = focus.executeMode, FocusPoints = focusPoints }; }
private byte[] GetImage(IntPtr img_stream, Edsdk.EdsImageSource imageSource) { IntPtr stream = IntPtr.Zero; IntPtr img_ref = IntPtr.Zero; IntPtr streamPointer = IntPtr.Zero; Edsdk.EdsImageInfo imageInfo; Edsdk.EdsSize outputSize = new Edsdk.EdsSize(); Byte[] buffer; Byte temp; //create reference to image Edsdk.EdsCreateImageRef(img_stream, out img_ref); //get information about image Edsdk.EdsGetImageInfo(img_ref, imageSource, out imageInfo); //calculate size, stride and buffersize outputSize.width = imageInfo.EffectiveRect.width; outputSize.height = imageInfo.EffectiveRect.height; int Stride = ((outputSize.width*3) + 3) & ~3; uint bufferSize = (uint) (outputSize.height*Stride); //Init buffer buffer = new Byte[bufferSize]; //Create memory stream to buffer Edsdk.EdsCreateMemoryStreamFromPointer(buffer, bufferSize, out stream); //copy image into buffer Edsdk.EdsGetImage(img_ref, imageSource, Edsdk.EdsTargetImageType.RGB, imageInfo.EffectiveRect, outputSize, stream); //makes RGB out of BGR if (outputSize.width%4 == 0) { for (int t = 0; t < bufferSize; t += 3) { temp = buffer[t]; buffer[t] = buffer[t + 2]; buffer[t + 2] = temp; } } else { int Padding = Stride - (outputSize.width*3); for (int y = outputSize.height - 1; y > -1; y--) { int RowStart = (outputSize.width*3)*y; int TargetStart = Stride*y; Array.Copy(buffer, RowStart, buffer, TargetStart, outputSize.width*3); for (int t = TargetStart; t < TargetStart + (outputSize.width*3); t += 3) { temp = buffer[t]; buffer[t] = buffer[t + 2]; buffer[t + 2] = temp; } } } //create pointer to image data Edsdk.EdsGetPointer(stream, out streamPointer); //Release all ressources Edsdk.EdsRelease(img_stream); Edsdk.EdsRelease(img_ref); Edsdk.EdsRelease(stream); var bitmap = new Bitmap(outputSize.width, outputSize.height, Stride, PixelFormat.Format24bppRgb, streamPointer); byte[] byteArray = new byte[0]; using (MemoryStream memostream = new MemoryStream()) { bitmap.Save(memostream, ImageFormat.Bmp); memostream.Close(); byteArray = memostream.ToArray(); } return byteArray; }
public static uint EdsGetPropertyData(IntPtr inRef, uint inPropertyId, int inParam, out Edsdk.EdsTime outPropertyData) { int size = Marshal.SizeOf(typeof(Edsdk.EdsTime)); IntPtr ptr = Marshal.AllocHGlobal(size); uint err = EdsGetPropertyData(inRef, inPropertyId, inParam, size, ptr); outPropertyData = (Edsdk.EdsTime)Marshal.PtrToStructure(ptr, typeof(Edsdk.EdsTime)); Marshal.FreeHGlobal(ptr); return err; }