Save 37% off PRO during our Black Friday Sale! »

仕様から、試用して、使用する!

27b73d7672b2f75a58184c544df1e721?s=47 HANACCHI
November 12, 2019
26

 仕様から、試用して、使用する!

20191112 【増席】RPA勉強&LT会!RPALT UiPathトーク~ Vol.1

27b73d7672b2f75a58184c544df1e721?s=128

HANACCHI

November 12, 2019
Tweet

Transcript

  1. 仕様から、試用して、使用する! Presented By hjmkzk@gmail.com

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

  3. 自己紹介 • 小﨑 肇(こざき はじめ⇒[ハナ]肇⇒はなっち!) • 59歳 昨日... もうすぐ… •

    東京都豊島区⇒神奈川県川崎市中原区 • 趣味 自転車だったけど、最近はINGRESS • 職歴  かなり前に今の会社に入社。 COBOL⇒JAVA⇒EXCEL-VBA  EXCEL-VBAでは、JP1-REPORTERとか、 SAGENT-REPORTERとか…  UiPath歴は、19ヶ月…  Uipath Japan MVP 2019 認定! Presented By hjmkzk@gmail.com
  4. アクセスしてね!

  5. さて

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

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

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

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

  10. 画像の一部の領域を切り抜くには? 引用元: 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
  11. 画像の一部の領域を切り抜くには? 引用元: 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 代入アクティビティ コードを呼び出し アクティビティ 左辺を指定出来る 左辺がない!
  12. 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) 代入アクティビティ
  13. pNew.Save(newFilePath, ImageFormat.Gif) bmpBase.Dispose() コードを呼び出し アクティビティ

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

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

  16. None
  17. ? UiPath Forumで質問をしてみる InvokeMethodアクティビティの使い方、設定について こんにちは InvokeMethodアクティビティのMethod名は大文字小文字が 区別されます。 そのためMethod名は“Save“とする必要があります。 InvokeMethodアクティビティは、復帰値を持たないメソッドを呼ぶ際 に使うと思っています。

    今、System.Drawing.Bitmap(元画像ファイル名)で読み込んだBMPファ イルを、bmp.Save(FileName, Format)と、InvokeCodeアクティビティ では保存できるようになったのですが、InvokeMethodアクティビティ で出来ないかと思っていて試行錯誤しています。 云々
  18. 「メソッドを呼び出し」アクティビティ化成功! メソッドを呼び出し アクティビティ

  19. None
  20. 可変要素は何か? 入力ファイル名 矩形情報  左(Left)  上(Top)  幅(Width) 

    高さ(Height) 出力ファイル名 出力形式(BMP,JPG,PNG)
  21. 可変要素の問題点は? 入力ファイル名 矩形情報  左(Left)  上(Top)  幅(Width) 

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

    高さ(Height) 出力ファイル名 出力形式(BMP,JPG,PNG) ・左、上が矩形左上座標より小さい ⇒矩形左上座標に合わせる ・左、上が矩形右下座標より大きい ⇒矩形左上座標に合わせる?? ・幅、高さが矩形幅、高さピクセルより大きい ⇒矩形幅、高さピクセルに合わせる
  23. 矩形情報 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となる。
  24. 可変要素の問題点は? 入力ファイル名 矩形情報  左(Left)  上(Top)  幅(Width) 

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

    高さ(Height) 出力ファイル名 出力形式(BMP,JPG,PNG) ・出力形式の指定は簡単ではない ⇒ImageFormatさえ入力できれば、候補値が出る。 ┗→指定させられるか? ⇒入力ファイルと同じ形式でよい? ┗→扱おうとしたファイルはなんだったか?
  26. 最終的な仕様 入力ファイル名 存在する前提とする。存在しない場合は異常終了 矩形情報  左(Left) 0より小さい、幅-1、高さ-1より大きい  上(Top) ⇒(0,0)位置を基点とする

     幅(Width) 1より小さい、幅、高さより大きい  高さ(Height) ⇒(幅,高さ)-(基点Left,基点Top)とする (出力)出力ファイル名 ⇒入力ファイル名に本日時刻を付加とする ⇒画像形式は、入力と同じとする ⇒その為、指定させない。 結果!
  27. ちょっと別件で多忙で、 まだ完成していない(^_^) まとめ!

  28. 仕様から、試用して、使用する... 実現できるか? アクティビティ? 変数化 引数化 例外 提供方法 実現できないと言う解は考えず、模索! 実装のためのアクティビティは? 変更変数は?内部で使う固定値を変数に?

    過不足ない引数になっている? Exception起こす前に補完する?Exceptionさせる? XAMLファイルとして提供?Library機能とする? Presented By hjmkzk@gmail.com