internal static void GmicImageListAdd(SafeGmicImageList list, uint width, uint height, GmicPixelFormat format, string name, out GmicImageListPixelData pixelData, out NativeImageFormat nativeImageFormat) { ValidateGmicImageList(list); pixelData = new GmicImageListPixelData(); nativeImageFormat = ConvertToNativeImageFormat(format); GmicStatus status = GmicNativeMethods.Instance.GmicImageListAdd(list, width, height, nativeImageFormat, string.IsNullOrWhiteSpace(name) ? null : name, pixelData); if (status != GmicStatus.Ok) { HandleError(status); } }
internal static void GmicImageListGetImageData(SafeGmicImageList list, uint index, out GmicImageListImageData data) { ValidateGmicImageList(list); data = new GmicImageListImageData(); GmicStatus status = GmicNativeMethods.Instance.GmicImageListGetImageData(list, index, data); if (status != GmicStatus.Ok) { HandleError(status); } }
internal static void RunGmic(SafeGmicImageList list, GmicOptions options) { if (options is null) { ExceptionUtil.ThrowArgumentNullException(nameof(options)); } ValidateGmicImageList(list); GmicErrorInfo errorInfo = new GmicErrorInfo(); GmicStatus status = GmicNativeMethods.Instance.RunGmic(list, options, errorInfo); if (status != GmicStatus.Ok) { HandleError(status, errorInfo); } }
private static void HandleError(GmicStatus status, GmicErrorInfo errorInfo) { switch (status) { case GmicStatus.Ok: break; case GmicStatus.InvalidParameter: throw new GmicException("An invalid parameter was passed to a native function."); case GmicStatus.OutOfMemory: throw new OutOfMemoryException(); case GmicStatus.UnknownImageFormat: throw new GmicException("The image uses an unknown format."); case GmicStatus.GmicError: if (errorInfo != null && TryGetMessageFromErrorInfo(errorInfo, out string message)) { string command = GetStringFromByteArray(errorInfo.commandName); throw new GmicException(message, command); } else { throw new GmicException("An unspecified error occurred when executing G'MIC."); } case GmicStatus.GmicResourcePathInitFailed: break; case GmicStatus.GmicUnsupportedChannelCount: throw new GmicException("The output G'MIC image has an unsupported number of channels."); case GmicStatus.ImageListIndexOutOfRange: throw new GmicException("The image list index is not valid."); case GmicStatus.UnknownError: default: throw new GmicException("An unspecified error occurred."); } }
private static void HandleError(GmicStatus status) { HandleError(status, null); }