Slide 1

Slide 1 text

仕様から、試用して、使用する! Presented By [email protected]

Slide 2

Slide 2 text

オヤジギャグは脳の ブレーキが効かなく なってくるから。 チコちゃんに叱られる! - NHK OA:2018年11月2日 仕様から、試用して、使用する!

Slide 3

Slide 3 text

自己紹介 • 小﨑 肇(こざき はじめ⇒[ハナ]肇⇒はなっち!) • 59歳 昨日... もうすぐ… • 東京都豊島区⇒神奈川県川崎市中原区 • 趣味 自転車だったけど、最近はINGRESS • 職歴 ➢ かなり前に今の会社に入社。 COBOL⇒JAVA⇒EXCEL-VBA ➢ EXCEL-VBAでは、JP1-REPORTERとか、 SAGENT-REPORTERとか… ➢ UiPath歴は、19ヶ月… ➢ Uipath Japan MVP 2019 認定! Presented By [email protected]

Slide 4

Slide 4 text

アクセスしてね!

Slide 5

Slide 5 text

さて

Slide 6

Slide 6 text

ある日、お客様から キャプチャの一部分だけを切り取れないか? と問合せを受けた...

Slide 7

Slide 7 text

「スクリーンショットを撮る」アクティビティで 範囲指定すれば、一部分をキャプチャ出来ます。 と、答えた…

Slide 8

Slide 8 text

「スクリーンショットを撮る」アクティビティで範囲 指定すれば、一部分がキャプチャ出来ます。 但し、矩形情報に変数は指定できません

Slide 9

Slide 9 text

但し、矩形情報に変数は指定できません 「スクリーンショットを撮る」アクティビティで範囲 指定すれば、一部分がキャプチャ出来ます。 ある日、お客様から キャプチャの一部分だけを切り取れないか? と問合せを受けた... お客様は納得してくださったが、 本当にこの解で良かったのか…

Slide 10

Slide 10 text

画像の一部の領域を切り抜くには? 引用元: 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

Slide 11

Slide 11 text

画像の一部の領域を切り抜くには? 引用元: 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 代入アクティビティ コードを呼び出し アクティビティ 左辺を指定出来る 左辺がない!

Slide 12

Slide 12 text

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) 代入アクティビティ

Slide 13

Slide 13 text

pNew.Save(newFilePath, ImageFormat.Gif) bmpBase.Dispose() コードを呼び出し アクティビティ

Slide 14

Slide 14 text

pNew.Save(newFilePath, ImageFormat.Gif) bmpBase.Dispose() ちゃんと動いた!でも、 「コードを呼び出し」アクティビティだと、 プログラミングっぽい

Slide 15

Slide 15 text

「メソッドを呼び出し」アクティビティ化

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

? UiPath Forumで質問をしてみる InvokeMethodアクティビティの使い方、設定について こんにちは InvokeMethodアクティビティのMethod名は大文字小文字が 区別されます。 そのためMethod名は“Save“とする必要があります。 InvokeMethodアクティビティは、復帰値を持たないメソッドを呼ぶ際 に使うと思っています。 今、System.Drawing.Bitmap(元画像ファイル名)で読み込んだBMPファ イルを、bmp.Save(FileName, Format)と、InvokeCodeアクティビティ では保存できるようになったのですが、InvokeMethodアクティビティ で出来ないかと思っていて試行錯誤しています。 云々

Slide 18

Slide 18 text

「メソッドを呼び出し」アクティビティ化成功! メソッドを呼び出し アクティビティ

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

可変要素は何か? ➢入力ファイル名 ➢矩形情報  左(Left)  上(Top)  幅(Width)  高さ(Height) ➢出力ファイル名 ➢出力形式(BMP,JPG,PNG)

Slide 21

Slide 21 text

可変要素の問題点は? ➢入力ファイル名 ➢矩形情報  左(Left)  上(Top)  幅(Width)  高さ(Height) ➢出力ファイル名 ➢出力形式(BMP,JPG,PNG) ・画像ファイルが存在しなかった。 ⇒確実に存在する仕様とする。異常終了させる ⇒でも存在しなかったら、 どのように結果を返すか? ・ファイルは実在するが、画像ファイルでなかった。 ⇒ファイル拡張子を評価する。 ⇒対象外ファイルだったら、 どのように結果を返すか?

Slide 22

Slide 22 text

可変要素の問題点は? ➢入力ファイル名 ➢矩形情報  左(Left)  上(Top)  幅(Width)  高さ(Height) ➢出力ファイル名 ➢出力形式(BMP,JPG,PNG) ・左、上が矩形左上座標より小さい ⇒矩形左上座標に合わせる ・左、上が矩形右下座標より大きい ⇒矩形左上座標に合わせる?? ・幅、高さが矩形幅、高さピクセルより大きい ⇒矩形幅、高さピクセルに合わせる

Slide 23

Slide 23 text

矩形情報 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となる。

Slide 24

Slide 24 text

可変要素の問題点は? ➢入力ファイル名 ➢矩形情報  左(Left)  上(Top)  幅(Width)  高さ(Height) ➢出力ファイル名 ➢出力形式(BMP,JPG,PNG) ・ファイルの形式ではない ⇒指定者の責任とする? ・入力ファイル名と同じファイル名 ⇒オリジナル画像を壊すのは忍びない ・出力ファイルが既に存在する。 ⇒上書きしてしまってよいか? ⇒ファイル名の後ろに(連番)を挿入するか?

Slide 25

Slide 25 text

可変要素の問題点は? ➢入力ファイル名 ➢矩形情報  左(Left)  上(Top)  幅(Width)  高さ(Height) ➢出力ファイル名 ➢出力形式(BMP,JPG,PNG) ・出力形式の指定は簡単ではない ⇒ImageFormatさえ入力できれば、候補値が出る。 ┗→指定させられるか? ⇒入力ファイルと同じ形式でよい? ┗→扱おうとしたファイルはなんだったか?

Slide 26

Slide 26 text

最終的な仕様 ➢入力ファイル名 存在する前提とする。存在しない場合は異常終了 ➢矩形情報  左(Left) 0より小さい、幅-1、高さ-1より大きい  上(Top) ⇒(0,0)位置を基点とする  幅(Width) 1より小さい、幅、高さより大きい  高さ(Height) ⇒(幅,高さ)-(基点Left,基点Top)とする ➢(出力)出力ファイル名 ⇒入力ファイル名に本日時刻を付加とする ⇒画像形式は、入力と同じとする ⇒その為、指定させない。 結果!

Slide 27

Slide 27 text

ちょっと別件で多忙で、 まだ完成していない(^_^) まとめ!

Slide 28

Slide 28 text

仕様から、試用して、使用する... 実現できるか? アクティビティ? 変数化 引数化 例外 提供方法 実現できないと言う解は考えず、模索! 実装のためのアクティビティは? 変更変数は?内部で使う固定値を変数に? 過不足ない引数になっている? Exception起こす前に補完する?Exceptionさせる? XAMLファイルとして提供?Library機能とする? Presented By [email protected]