Share
Embed
Transcript
28 slides
-
自己紹介 • 小﨑 肇(こざき はじめ⇒[ハナ]肇⇒はなっち!) • 59歳 昨日... もうすぐ… •
東京都豊島区⇒神奈川県川崎市中原区 • 趣味 自転車だったけど、最近はINGRESS • 職歴 かなり前に今の会社に入社。 COBOL⇒JAVA⇒EXCEL-VBA EXCEL-VBAでは、JP1-REPORTERとか、 SAGENT-REPORTERとか… UiPath歴は、19ヶ月… Uipath Japan MVP 2019 認定! Presented By [email protected] -
画像の一部の領域を切り抜くには? 引用元: https://www.atmarkit.co.jp/fdotnet/dotnettips/912bitmapcroprect/bitmapcroprect.html Module Module1 Sub Main() ' 画像を読み込む Dim
baseFilePath As String = "C:¥bitmapBase.gif" Dim bmpBase As New Bitmap(baseFilePath) ' 画像を切り抜く Dim rect As New Rectangle(20, 90, 450, 100) Dim bmpNew As Bitmap = bmpBase.Clone(rect, bmpBase.PixelFormat) ' 画像をGIF形式で保存 Dim newFilePath As String = "C:¥ bitmapNew.gif" bmpNew.Save(newFilePath, ImageFormat.Gif) ' 画像リソースを解放 bmpBase.Dispose() bmpNew.Dispose() End Sub End Module 画像の切り抜きにはいくつかの方法があるが、Bitmapオ ブジェクトのCloneメソッドを使うと少ない手順で可能だ。 Cloneメソッドの第1パラメータにはRectangle構造体 (System.Drawing名前空間)のオブジェクトを、第2パ ラメータにはPixelFormat列挙体 (System.Drawing.Imaging名前空間)の値を指定する。 引用元: https://www.atmarkit.co.jp/fdotnet/dotnettips/912bitmapcroprect/bitmapcroprect.html -
画像の一部の領域を切り抜くには? 引用元: https://www.atmarkit.co.jp/fdotnet/dotnettips/912bitmapcroprect/bitmapcroprect.html Module Module1 Sub Main() ' 画像を読み込む Dim
baseFilePath As String = "C:¥bitmapBase.gif" Dim bmpBase As New Bitmap(baseFilePath) ' 画像を切り抜く Dim rect As New Rectangle(20, 90, 450, 100) Dim bmpNew As Bitmap = bmpBase.Clone(rect, bmpBase.PixelFormat) ' 画像をGIF形式で保存 Dim newFilePath As String = "C:¥ bitmapNew.gif" bmpNew.Save(newFilePath, ImageFormat.Gif) ' 画像リソースを解放 bmpBase.Dispose() bmpNew.Dispose() End Sub End Module 代入アクティビティ コードを呼び出し アクティビティ 左辺を指定出来る 左辺がない! -
Dim baseFilePath As String = "C:¥bitmapBase.gif" Dim bmpBase As New
Bitmap(baseFilePath) Dim rect As New Rectangle(20, 90, 450, 100) Dim bmpNew As Bitmap = bmpBase.Clone(rect, bmpBase.PixelFormat) 代入アクティビティ -
? UiPath Forumで質問をしてみる InvokeMethodアクティビティの使い方、設定について こんにちは InvokeMethodアクティビティのMethod名は大文字小文字が 区別されます。 そのためMethod名は“Save“とする必要があります。 InvokeMethodアクティビティは、復帰値を持たないメソッドを呼ぶ際 に使うと思っています。
今、System.Drawing.Bitmap(元画像ファイル名)で読み込んだBMPファ イルを、bmp.Save(FileName, Format)と、InvokeCodeアクティビティ では保存できるようになったのですが、InvokeMethodアクティビティ で出来ないかと思っていて試行錯誤しています。 云々 -
可変要素は何か? 入力ファイル名 矩形情報 左(Left) 上(Top) 幅(Width)
高さ(Height) 出力ファイル名 出力形式(BMP,JPG,PNG) -
可変要素の問題点は? 入力ファイル名 矩形情報 左(Left) 上(Top) 幅(Width)
高さ(Height) 出力ファイル名 出力形式(BMP,JPG,PNG) ・画像ファイルが存在しなかった。 ⇒確実に存在する仕様とする。異常終了させる ⇒でも存在しなかったら、 どのように結果を返すか? ・ファイルは実在するが、画像ファイルでなかった。 ⇒ファイル拡張子を評価する。 ⇒対象外ファイルだったら、 どのように結果を返すか? -
可変要素の問題点は? 入力ファイル名 矩形情報 左(Left) 上(Top) 幅(Width)
高さ(Height) 出力ファイル名 出力形式(BMP,JPG,PNG) ・左、上が矩形左上座標より小さい ⇒矩形左上座標に合わせる ・左、上が矩形右下座標より大きい ⇒矩形左上座標に合わせる?? ・幅、高さが矩形幅、高さピクセルより大きい ⇒矩形幅、高さピクセルに合わせる -
矩形情報 Dim rect As New Rectangle(Left, Top, Wigth, Height) 0
Width Leftの決定 … Leftは、0以上であり、Width未満である CorrectedLeft = Math.Min(Math.Max(LowerLimit,Left),UpperLimit) LowerLimit = 0 UpperLimit = ImageWidth ー 1 例えば幅が100で、指定したLeftが -1だったら、 Math.Max(0, -1)=0となり、 Math.Min(0, 99)=0となる。 10だったら、 Math.Max(0, 10)=10となり、 Math.Min(10, 99)=10となる。 99だったら、 Math.Max(0, 99)= 99となり、 Math.Min(99, 99)=100となる。 120だったら、 Math.Max(0, 120)=120となり、 Math.Min(120, 99)=100となる。 -
可変要素の問題点は? 入力ファイル名 矩形情報 左(Left) 上(Top) 幅(Width)
高さ(Height) 出力ファイル名 出力形式(BMP,JPG,PNG) ・ファイルの形式ではない ⇒指定者の責任とする? ・入力ファイル名と同じファイル名 ⇒オリジナル画像を壊すのは忍びない ・出力ファイルが既に存在する。 ⇒上書きしてしまってよいか? ⇒ファイル名の後ろに(連番)を挿入するか? -
可変要素の問題点は? 入力ファイル名 矩形情報 左(Left) 上(Top) 幅(Width)
高さ(Height) 出力ファイル名 出力形式(BMP,JPG,PNG) ・出力形式の指定は簡単ではない ⇒ImageFormatさえ入力できれば、候補値が出る。 ┗→指定させられるか? ⇒入力ファイルと同じ形式でよい? ┗→扱おうとしたファイルはなんだったか? -
最終的な仕様 入力ファイル名 存在する前提とする。存在しない場合は異常終了 矩形情報 左(Left) 0より小さい、幅-1、高さ-1より大きい 上(Top) ⇒(0,0)位置を基点とする
幅(Width) 1より小さい、幅、高さより大きい 高さ(Height) ⇒(幅,高さ)-(基点Left,基点Top)とする (出力)出力ファイル名 ⇒入力ファイル名に本日時刻を付加とする ⇒画像形式は、入力と同じとする ⇒その為、指定させない。 結果! -
仕様から、試用して、使用する... 実現できるか? アクティビティ? 変数化 引数化 例外 提供方法 実現できないと言う解は考えず、模索! 実装のためのアクティビティは? 変更変数は?内部で使う固定値を変数に?
過不足ない引数になっている? Exception起こす前に補完する?Exceptionさせる? XAMLファイルとして提供?Library機能とする? Presented By [email protected]