今年も結局昨年と同様のスケジュール
なぜもっと早くできない!! の反省会
設定・手順は昨年版を参照(の方が詳しい)
レイヤーの写真を張り変えるテンプレ作業はいつもより早かったと思うが...やはりいろいろトラブルがあって大掃除しながら2.5日程度かかっている感じ
---
画像のリサイズ
0. お好みの写真を選択し、1071x832の縦横比でトリミング
1. 画像 -> 画像拡大縮小 で 1071x832
2. 画像 -> キャンバスサイズ で、↑になっていなければ同じサイズにする
こんな感じで行けたような...
---
画像をはがきテンプレに貼る
1. はがきテンプレとしたxcfのファイルを開く
2. ("レイヤー"ダイアログが表示されていない場合は、画像が出ているウィンドウの"ダイアログ -> レイヤー"を選択すると表示される)
3. 写真が表示されているレイヤーに、上記"画像のリサイズ"で作ったxcfをドラッグアンドドロップ
4. 古い写真レイヤーが表示されているが、不要なので削除
5. "The GIMP"ダイアログの移動アイコン(矢印の十字)を選択して、写真のレイヤーをつかんでよさそうな位置に移動する
---
レイヤーを重ねた上で、写真を鮮やかにしたい
1. "レイヤー"ダイアログで、写真を配置したレイヤーを選択
2. レイヤー -> 色 -> 色相・彩度で、彩度を思いっきり上げると派手な感じになってよさげ
---
印刷
- GIMPから印刷する
1. レイヤー -> 下のレイヤーと結合 を繰り返して、レイヤーを1枚にする
2. GIMPからファイル -> 印刷
3. プリンターを"ネットワーク"に設定(印刷する度にリセットされるようだ)
給紙トレイ : フォト
用紙サイズ : はがき
メディア : インクジェット紙
4. 詳細設定で
出力品質 : 高画質 にする
(ICMが"写真"になっていたりするのは"3"の設定で反映されている模様?)
フチあり印刷で良い
---
HP-209aはがきトレイ不具合
なかなか給紙しない -> 宛名面にそらせたり、給紙する際に押してやると有効
---
インク
- amazonで350円代で3本のが、一昨年とは別の店で売っているので、プリンタを動作確認してよさそうなら早めに買っておく
- で、28日くらいに注文すると、年明けになってしまうので、今年もあきらめ
- チェックすると 青・赤・黒(つまり黄色以外)がテスト印刷でカスレ始める
- 近所だと意外に高い(4000円程度)ので諦め
- 互換インクがあったので、4色買う (約3000円。ポイント使用)
実は、スーパーにもあって値段は一緒。バーゲンで5%オフならスーパー有利だが、
今回はipad買ったときのポイントで購入(他に購入予定のものもないし...)
- 結局黄色も途中で切れたので、よかったのだが... 黒が5枚程度の印刷でカスレる orz
- 古いカートリッジ(純正)につけかえると、いくらかましな印刷だったので、ヘッド目詰まりではなさそう
- 翌日(12/31)にお店で交換
- とりあえずこれで今回はなんとかなった (損失5枚)
インクは毎回もめる...
早めにプリンタのテストして、amazonで買っておくのがよさそうだ
(値段が全然違うので、不良品ならそこだけ純正買えばよいのだし)
2016年12月31日土曜日
2016年12月15日木曜日
タスクとUI表示 その1
(長い処理を行いたい場合など)Worker threadとUI threadの関係はやや面倒で、
- 描画はUI threadで行う
- UI threadで長い処理を行うと描画が固まる
- 長時間処理はworker threadで行えば画面固まらない
- でも描画はUI threadで行わないといけない
ということで、background workerだったり、invokeで描画させたりなど、昔から面倒だった訳ですが、最近?はasync/awaitが非同期処理の流行りのようです。
実験的に作ったアプリは
- 長時間処理用と仮定したtaskを生成する
- 上記taskから描画表示を行う
という処理を、async/awaitとinvokeを使って書いてみます。
formのデザイン画面には
- taskを開始するボタン
- 状態を表示するUIとしてtextbox
を配置します。
textboxでは、taskから1秒ごとに時間を表示させます。
taskが終了したらUI threadで"終了した"表示を行います。
表示部分のポイントは
textBox_dispTime.Invoke(new Action(() => { textBox_dispTime.Text = DateTime.Now.ToString(); }));
の部分で、
UI部品.Invoke(デリゲート);
という感じの模様。
これでtask側からtextBox_dispを操作する事ができました。
taskについてのポイントは
- await Task.Run(() => workThread()); として、awaitキーワードをつけたTask.Run()する
- awaitキーワードを使うメソッドには"async"キーワードを付ける
となり、動作としては、
- UIスレッドはawaitで待ち
- task側からUI(textBox)を操作
- workThread()が終了すると、その次のメソッド(UIスレッドからtextboxに"終了"を書く)実行
という感じでした。
ソースコード
using System.Threading;
namespace TestAwait01
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
// awaitキーワードを使うメソッドはasyncキーワードをつけておく
private async void button_TaskStart_Click(object sender, EventArgs e)
{
await Task.Run(() => workThread()); // workThreadの処理をtaskで実行
textBox_dispTime.Text = "終了";
}
// threadとして実行するメソッド
private void workThread()
{
for(int i = 0; i < 10; i++) {
// textBox_dispTime.Text = DateTime.Now.ToString(); // コレは表示されない
textBox_dispTime.Invoke(new Action(() => { textBox_dispTime.Text = DateTime.Now.ToString(); }));
Thread.Sleep(1000);
}
}
}
- 描画はUI threadで行う
- UI threadで長い処理を行うと描画が固まる
- 長時間処理はworker threadで行えば画面固まらない
- でも描画はUI threadで行わないといけない
ということで、background workerだったり、invokeで描画させたりなど、昔から面倒だった訳ですが、最近?はasync/awaitが非同期処理の流行りのようです。
実験的に作ったアプリは
- 長時間処理用と仮定したtaskを生成する
- 上記taskから描画表示を行う
という処理を、async/awaitとinvokeを使って書いてみます。
formのデザイン画面には
- taskを開始するボタン
- 状態を表示するUIとしてtextbox
を配置します。
textboxでは、taskから1秒ごとに時間を表示させます。
taskが終了したらUI threadで"終了した"表示を行います。
表示部分のポイントは
textBox_dispTime.Invoke(new Action(() => { textBox_dispTime.Text = DateTime.Now.ToString(); }));
の部分で、
UI部品.Invoke(デリゲート);
という感じの模様。
これでtask側からtextBox_dispを操作する事ができました。
taskについてのポイントは
- await Task.Run(() => workThread()); として、awaitキーワードをつけたTask.Run()する
- awaitキーワードを使うメソッドには"async"キーワードを付ける
となり、動作としては、
- UIスレッドはawaitで待ち
- task側からUI(textBox)を操作
- workThread()が終了すると、その次のメソッド(UIスレッドからtextboxに"終了"を書く)実行
という感じでした。
ソースコード
using System.Threading;
namespace TestAwait01
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
// awaitキーワードを使うメソッドはasyncキーワードをつけておく
private async void button_TaskStart_Click(object sender, EventArgs e)
{
await Task.Run(() => workThread()); // workThreadの処理をtaskで実行
textBox_dispTime.Text = "終了";
}
// threadとして実行するメソッド
private void workThread()
{
for(int i = 0; i < 10; i++) {
// textBox_dispTime.Text = DateTime.Now.ToString(); // コレは表示されない
textBox_dispTime.Invoke(new Action(() => { textBox_dispTime.Text = DateTime.Now.ToString(); }));
Thread.Sleep(1000);
}
}
}
登録:
投稿 (Atom)