예제 #1
0
 /// <summary>
 /// 回転するGifを生成する
 /// </summary>
 /// <param name="image">生成の元となる画像</param>
 /// <param name="parameter">生成に使用する各種パラメータ</param>
 /// <param name="savePath">生成したGifの保存先のパス</param>
 /// <exception cref="ArgumentNullException">
 /// 引数が以下の場合に発生する
 /// ・生成の元となる画像(<paramref name="image"/>)がNULLの場合
 /// ・生成に使用する各種パラメータ(<paramref name="parameter"/>)がNULLの場合
 /// ・生成に使用する各種パラメータ(<paramref name="parameter"/>)において、
 ///  1フレームで移動する角度のリスト(<see cref="ImageParameter.RotateAmountListPerFrame"/>)が
 ///  NULLの場合
 /// ・Gifファイルを保存する場合(※1)で、引数の生成したGifの保存先のパス
 ///  (<paramref name="savePath"/>)がNULLの場合
 /// ※1:生成に使用する各種パラメータ(<paramref name="parameter"/>)において、
 ///    プレビューモードかのフラグ(<see cref="ImageParameter.IsPreview"/>)が True の場合
 /// </exception>
 /// <exception cref="ArgumentOutOfRangeException">
 /// 引数の生成に使用する各種パラメータ(<paramref name="parameter"/>)において、
 /// フレームレート(<see cref="ImageParameter.FrameRate"/>)が0以下の場合に発生
 /// </exception>
 /// <exception cref="ArgumentException">
 /// 引数の生成したGifの保存先のパス(<paramref name="savePath"/>)が空文字
 /// または、<see cref="Path.GetInvalidPathChars"/> で定義される無効な文字が含まれている場合に発生
 /// </exception>
 /// <exception cref="NotSupportedException">
 /// 引数の生成したGifの保存先のパス(<paramref name="savePath"/>)に、
 /// ドライブラベル(C:\)の一部ではないコロン文字(:)が含まれている場合に発生
 /// </exception>
 /// <exception cref="IOException">
 /// 下記の場合に発生
 /// 1. 引数のGifの保存先のパス(<paramref name="savePath"/>)が示すディレクトリが正しくない場合
 ///  (マップされていないドライブ名が指定されている場合等)
 ///  [<see cref="DirectoryNotFoundException"/>]
 /// 2. 引数のGifの保存先のパス(<paramref name="savePath"/>)がシステム定義の最大長を超えている場合
 ///  (Windowsでは、パスは248文字以下、ファイル名は260文字以下にする必要がある)
 ///  [<see cref="PathTooLongException"/>]
 /// 3. I/O エラーが発生した場合
 ///  [<see cref="IOException"/>]
 /// </exception>
 /// <exception cref="UnauthorizedAccessException">
 /// 以下の場合に発生する
 /// ・引数の生成したGifの保存先のパス(<paramref name="savePath"/>)において、
 ///  隠しファイル等のアクセスできないファイルが既に存在している場合に発生
 /// ・呼び出し元に、必要なアクセス許可がない場合に発生
 /// </exception>
 /// <exception cref="System.Security.SecurityException">
 /// 呼び出し元に、必要なアクセス許可がない場合に発生
 /// </exception>
 /// <exception cref="System.Runtime.InteropServices.ExternalException">
 /// 引数の生成の元となる画像(<paramref name="image"/>)を、
 /// 回転させた画像データが正しくないイメージ形式の場合に発生
 /// </exception>
 /// <exception cref="Exception">
 /// 引数の生成の元となる画像(<paramref name="image"/>)から <see cref="Bitmap"/> オブジェクトが
 /// 生成できない場合に発生
 /// (インデックス付きピクセル形式かの形式が定義されていない場合等)
 /// </exception>
 /// <exception cref="SpinTheImageException">
 /// Gifを作成する過程で生成したPngファイルを保存するディレクトリ名の生成において、
 /// 生成したディレクトリと同じパスのディレクトリが既に存在しており
 /// 新しいディレクトリの作成が行えない場合に発生
 /// (何度かディレクトリの生成を行うがその全てにおいて同じパスのディレクトリが、
 ///  既に存在している場合のみ発生)
 /// </exception>
 /// <exception cref="MisaCommon.Exceptions.GifEncoderException">
 /// Gifデータへのエンコードに失敗した場合に発生
 /// </exception>
 /// <returns>処理が成功した場合:True、中断した場合:False</returns>
 public static bool CreateRotateGif(
     Image image,
     ImageParameter parameter,
     string savePath)
 {
     return(CreateRotateGif(image, parameter, savePath, null, null));
 }
예제 #2
0
        /// <summary>
        /// 回転するGifを生成する
        /// </summary>
        /// <param name="image">
        /// 生成の元となる画像
        /// </param>
        /// <param name="parameter">
        /// 生成に使用する各種パラメータ
        /// </param>
        /// <param name="savePath">
        /// 生成したGifの保存先のパス
        /// </param>
        /// <param name="previewAction">
        /// プレビュー表示処理を行うメソッド
        /// </param>
        /// <param name="progressAction">
        /// 進捗率の表示を行うメソッド(当メソッドでは0~100%の値を設定する)
        /// </param>
        /// <exception cref="ArgumentNullException">
        /// 引数が以下の場合に発生する
        /// ・生成の元となる画像(<paramref name="image"/>)がNULLの場合
        /// ・生成に使用する各種パラメータ(<paramref name="parameter"/>)がNULLの場合
        /// ・生成に使用する各種パラメータ(<paramref name="parameter"/>)において、
        ///  1フレームで移動する角度のリスト(<see cref="ImageParameter.RotateAmountListPerFrame"/>)が
        ///  NULLの場合
        /// ・Gifファイルを保存する場合(※1)で、引数の生成したGifの保存先のパス
        ///  (<paramref name="savePath"/>)がNULLの場合
        /// ※1:生成に使用する各種パラメータ(<paramref name="parameter"/>)において、
        ///    プレビューモードかのフラグ(<see cref="ImageParameter.IsPreview"/>)が True の場合
        /// </exception>
        /// <exception cref="ArgumentOutOfRangeException">
        /// 引数の生成に使用する各種パラメータ(<paramref name="parameter"/>)において、
        /// フレームレート(<see cref="ImageParameter.FrameRate"/>)が0以下の場合に発生
        /// </exception>
        /// <exception cref="ArgumentException">
        /// 引数の生成したGifの保存先のパス(<paramref name="savePath"/>)が空文字
        /// または、<see cref="Path.GetInvalidPathChars"/> で定義される無効な文字が含まれている場合に発生
        /// </exception>
        /// <exception cref="NotSupportedException">
        /// 引数の生成したGifの保存先のパス(<paramref name="savePath"/>)に、
        /// ドライブラベル(C:\)の一部ではないコロン文字(:)が含まれている場合に発生
        /// </exception>
        /// <exception cref="IOException">
        /// 下記の場合に発生
        /// 1. 引数のGifの保存先のパス(<paramref name="savePath"/>)が示すディレクトリが正しくない場合
        ///  (マップされていないドライブ名が指定されている場合等)
        ///  [<see cref="DirectoryNotFoundException"/>]
        /// 2. 引数のGifの保存先のパス(<paramref name="savePath"/>)がシステム定義の最大長を超えている場合
        ///  (Windowsでは、パスは248文字以下、ファイル名は260文字以下にする必要がある)
        ///  [<see cref="PathTooLongException"/>]
        /// 3. I/O エラーが発生した場合
        ///  [<see cref="IOException"/>]
        /// </exception>
        /// <exception cref="UnauthorizedAccessException">
        /// 以下の場合に発生する
        /// ・引数の生成したGifの保存先のパス(<paramref name="savePath"/>)において、
        ///  隠しファイル等のアクセスできないファイルが既に存在している場合に発生
        /// ・呼び出し元に、必要なアクセス許可がない場合に発生
        /// </exception>
        /// <exception cref="System.Security.SecurityException">
        /// 呼び出し元に、必要なアクセス許可がない場合に発生
        /// </exception>
        /// <exception cref="System.Runtime.InteropServices.ExternalException">
        /// 引数の生成の元となる画像(<paramref name="image"/>)を、
        /// 回転させた画像データが正しくないイメージ形式の場合に発生
        /// </exception>
        /// <exception cref="Exception">
        /// 引数の生成の元となる画像(<paramref name="image"/>)から <see cref="Bitmap"/> オブジェクトが
        /// 生成できない場合に発生
        /// (インデックス付きピクセル形式かの形式が定義されていない場合等)
        /// </exception>
        /// <exception cref="SpinTheImageException">
        /// Gifを作成する過程で生成したPngファイルを保存するディレクトリ名の生成において、
        /// 生成したディレクトリと同じパスのディレクトリが既に存在しており
        /// 新しいディレクトリの作成が行えない場合に発生
        /// (何度かディレクトリの生成を行うがその全てにおいて同じパスのディレクトリが、
        ///  既に存在している場合のみ発生)
        /// </exception>
        /// <exception cref="MisaCommon.Exceptions.GifEncoderException">
        /// Gifデータへのエンコードに失敗した場合に発生
        /// </exception>
        /// <returns>処理が成功した場合:True、中断した場合:False</returns>
        public static bool CreateRotateGif(
            Image image,
            ImageParameter parameter,
            string savePath,
            Action <Image> previewAction,
            Action <int> progressAction)
        {
            // NULLチェック
            if (image == null)
            {
                throw new ArgumentNullException(nameof(image));
            }
            else if (parameter == null)
            {
                throw new ArgumentNullException(nameof(parameter));
            }
            else if (!parameter.IsPreview && savePath == null)
            {
                throw new ArgumentNullException(nameof(savePath));
            }

            // 中断フラグを OFF にする
            IsStop = false;

            // Gifを作成する過程で生成したPngファイルを保存するディレクトリパスを取得
            // (Pngファイルを出力する場合のみ取得する)
            string pngDirectoryPath = null;

            if (parameter.IsOutputPng && !parameter.IsPreview)
            {
                pngDirectoryPath = GetPngOutputDirectoryPath(savePath);
            }

            // 回転情報リストを生成
            IList <RotateInfo> rotateInfos = CreateRotateInfoList(
                frameRate: parameter.FrameRate,
                movingAngleList: parameter.RotateAmountListPerFrame,
                isRotateToEnd: parameter.IsRotateToEnd);

            // 回転させる画像の元データを生成
            Func <Image, Image> createBaceImage = GetCreateBaceImageFunc(
                isChangeCanvasSize: parameter.IsChangeCanvasSize,
                changeSize: parameter.CanvasSize,
                changeCenterPoint: parameter.CenterPoint);

            using (Image baceImage = createBaceImage(image))
            {
                // 画像を表示
                previewAction?.Invoke(baceImage);

                // 進捗を10%
                progressAction?.Invoke(10);

                // 回転させた画像データのGifファイルを作成する
                CreateRotateGifFile(
                    baceImage: baceImage,
                    rotateInfos: rotateInfos,
                    isRoop: parameter.IsRoop,
                    roopCount: parameter.RoopCount,
                    isPreview: parameter.IsPreview,
                    isOutputPng: parameter.IsOutputPng,
                    savePath: savePath,
                    pngDirectoryPath: pngDirectoryPath,
                    previewAction: previewAction,
                    progressAction: progressAction);

                // 中断しているか判定
                if (IsStop)
                {
                    // 中断なので False を返却する
                    return(false);
                }
            }

            // 進捗を100%
            progressAction?.Invoke(100);

            // 正常終了 True を返す
            return(true);
        }