結論から言いますと、
どちらもサーバー側にパスワードを設定することで回避可能です。

さらに自動ログイン設定を行うことでパスワードなしの状態とほぼ同じように
運用できるようになるので、パスワード入力が面倒だと思って躊躇している方も
ぜひお試しください。自動ログインの設定手順はこちら



現象1)クライアントPCが勝手に再起動する

リモートデスクトップで接続直後ないし数分で、突然クライアントの画面に
「重大な問題が発生したため、1分で自動的に再起動されます」
といった内容のメッセージが表示され、宣言通り問答無用で再起動がかかります。

クライアントがWindows10で、かつログインに使用するサーバー側のアカウントに
パスワードが設定されていない場合に発生します。
サーバー側のOSは関係ないようです(Windows7, 8, 10で現象を確認)。
またクライアント側がWindows7, 8の場合には発生しません。

いまのところ回避策はサーバー側にパスワードを設定するしかないようです。

原因はわかっていませんが、Windows10のバグの可能性が高いと思っています。
もちろんWindows10でセキュリティが強化され、パスワードがないアカウントで
接続できないように仕様が変更された可能性もありますが、
それにしては対応が乱暴すぎます。その場合
「パスワードが設定されていないアカウントでは接続できません」とでも表示して
接続をキャンセルすれば済むことで、何も再起動させる必要はないはずです。

それにグループポリシーにはリモート接続で空のパスワードを
許可するための設定項目が残っていますし。
ただしこの設定項目はWindows10では正常に機能していないのでは?
という情報も見かけました。



現象2)接続が切断される

リモートデスクトップで接続してから大体一分以内に
「別のユーザがリモートコンピュータに接続したため、接続が失われました」
といった内容のメッセージが表示され切断されます。

この現象はサーバー側がWindows10で、ログインに使用するアカウントに
パスワードが設定されていない場合に発生します。
クライアント側はどのOSでも発生すると思います(今回はWindows10でのみ確認)。

こちらもサーバー側にパスワードを設定することで回避可能です。
もしくは事前にサーバーをログアウトしておくだけでも良いみたいです(未確認)。

原因はリモート接続後にサーバー側が再ログインを試みるためと思われます。
Windows8まででしたら、接続した時点でサーバー側は自動的にログアウトされ
そのままロック状態になるところですが、なぜかWindows10ではそうならず
リモートを押しのけて勝手に再ログインしようとするようです。
パスワードを設定すると入力待ちで止まるので回避できるというわけです。



それにしてもこれだけ重大な問題でありながら
なぜか日本ではほとんど話題になっていないのが不思議です。
パスワードなしでリモートデスクトップ使用してる人少ないんでしょうかね。

まあお仕事で使うマシンはパスワード必須ですし、
個人でも外から繋ぐ場合はパスワードかけないと危険ですからね。
私のように自宅内の歩いていける距離のマシンにも
リモート接続するようなモノグサはいないと……
Windows/.NET comments(3) -
予約者限定ノベルティ配布も三回目だというのに予約できてません。
というのも店舗特典の図案が未だにラフ画すら公表されてないんですよね。
ぶっちゃけ予約なんてほぼほぼ特典が目当てなのに
こんな状況で予約しろってのが無茶な話ですよ。
前作までのスケジュール感だと、それ以外の情報もいろいろ遅れてる感じですし。
なんというかクオリティが非常に心配です。

こう出遅れると早期予約特典も店舗によってはもう無いだろうし、
例のノベルティ逃した感で逆に購買意欲がマイナスにはたらきます。
今回は発売後の評判みてからでいいかな……
ゲーム comments(0) -
すでに季節は秋ですが気にせず夏イベの総括でも。
今回のお題は

「全ての作戦に扶桑・山城を出撃させ、かつ艦隊旗艦および次席に配置する」

です!

もちろん「全ステージ甲」「雷巡禁止」はデフォです。
といっても今回はルート制約上、ほとんど雷巡は使えませんでしたけどね。
むしろ阿武隈改二が使えた分、私にとっては相当楽でした。
阿武隈不可にしようか迷いましたが雷巡と違ってもともと好きなキャラだったのでこれはOKとしました。



■■■ E1 ■■■

20150914_11.png

トップバッターは扶桑改・山城改のペアです。
改の航空戦艦は火力が低く後半海域では決定力不足となるのは
想像に難くないため緒戦で投入しました。

あとは固定の菊月に合わせて同じ睦月型の睦月・如月ペアを入れてみました。
最短ルートを通るためには戦艦がギリギリ二隻までだったので助かりました。



■■■ E2 ■■■

20150914_21.png

南ルートには強力な航空戦力が存在しないようだったので
第一艦隊は航空戦艦+航空巡洋艦で編成してみました。

感想 : 潜水艦マスがびっくりするくらい長い(笑)

20150914_22.png

ここまではほぼストレートで快調にクリアしました。



■■■ E3 ■■■

攻略中の記事でも書きましたがここで
瑞穂をお迎えするため丙S勝利122回こなしてます。
3日かかりました。
ついでにウィークリーも消化。まだ余裕余裕…

20150914_31.png

E3→E6→E7と進む部隊なので迷わず主力の扶桑改二・山城改二を投入です。
夕立を史実通りE4に向かわせるかでかなり悩みました。

20150914_32.png

結局夕立を含めた全主力をここに投入します。
特に第二艦隊は2015冬と同様の最終決戦用の陣容!
まあまだオイゲンカットインは封印してますが。



■■■ E4 ■■■

20150914_42.png

今回のイベントで編成的に一番苦労したのがこのE4でした。
上は北回りの前哨戦時の編成ですが、扶桑・山城で大型艦枠を
二つ使ってしまうとあとはもうほとんど融通が効きません。

なお本作戦で使用した扶桑・山城は未改造の戦艦バージョンです。
戦艦はあと改三用の99レベルがいるのですが、
E5は比較的簡単という前情報だったのでこちらに150レベルを投入しました。

そして夜戦ルートからの決戦時がこちら。

20150914_41.png

隠れててよく見えませんが、編成は
扶桑・山城・比叡改二・霧島改二・龍驤改二・龍鳳改 です。

本当は金剛・比叡の百合ペアを組みたかったのですが
ルートの関係上断念しました。



■■■ E5 ■■■

20150914_51.png

ここで最後の扶桑・山城を投入しました。
編成は 扶桑・山城・雲龍改・陽炎改・不知火改・利根改二(筑摩改二) です。

航空巡洋艦枠には結婚艦の鈴熊を使いたかったのですが
唯一E7海域へ参戦できない制約があるのと、
枠が一つしかなくて百合百合できないとの理由で却下。
空母は戦力温存のためどうでもいい比較的エコなのをチョイスしました。



■■■ E6 ■■■

ここで再び風雲に捕まります。
験を担いで瑞穂と同じ丙122回S勝利しましたが出ませんでした。
堀で予定していた資源はすっかり使いきってしまい、
さらに予備として多めに見積もっていた分の資源にも手を付け
本当にギリギリのラインまで粘りましたがダメでした。

 C ・ 敗 ・ 北 !

諦めて攻略に向かいます。

20150914_61.png

E3とほぼ同じ編成ですがここでのポイントはズバリ葛城です。
葛城は瑞鶴先輩のことを密かに慕っているのですが
その一方で翔鶴と瑞鶴の仲に踏み込めずに
少し距離をおいて二人を眺めているという(脳内)設定です。
既に99レベルに到達しており本当は結婚させてあげたいんですが、
この設定のため結婚しない方がオイシイのかな?と思いつつ保留中です。


ふぅ…

20150914_62.png

これまでずっと最終局面での軽巡は川内だったのですが、
今回は阿武隈にしてみました。
由良も好きなので改二で開幕雷撃出たらいいなと期待してます。

おまけ

風雲に当初の予定を上回る資源をもっていかれてしまったため
E7攻略に入る前に緊急用の補給(1-6)を行いました。
まさかこれを使うことになるとはな……久々にいい感じだぜっ(泣)

20150914_63.png



■■■ E7 ■■■

2015冬E5と違い今度は空母機動艦隊なのが最大の不安材料でした。
ただ敵旗艦の耐久は前回の戦艦水鬼と比べたら大幅に低いため
一発当てれば落とせそうな感じはあります。

まあ前提として道中は可能な限り被弾しないのは基本として、
開幕では旗艦と棲姫以外の随伴艦が一掃できたら理想ですね。

↓理想の例

20150914_77.png

冬は確かネ級が二体いたように記憶してますが、
今回の敵随伴艦は大したことないので支援は命中重視にしてみました。
これはその成果…ということにしておきましょう!
装備は最後に載せてあります

こうなれば敵主力に集中砲火が可能になるので
できれば昼のうちに棲姫を中破以上、旗艦も多少削っておければベストですね。

↓ベストな例

20150914_71.png

ちょっと被弾しすぎですがなんとか全員中破で踏ん張ってくれました。
これで私も安心して夜戦ボタンを押せます。

20150914_72.png

長期戦の予定が案外あっさり終わりました。
やはり艦載機熟練度によって空母の制空・対艦攻撃力が大幅に強化されたこと、
そして何より阿武隈の先制雷撃が非常に心強かったです。
装備改修も以前よりも着実に進んでますしね。



なにはともあれこれで目標達成です。
風雲は取り逃しましたが。

20150914_81.png
20150914_82.png
20150914_83.png


悔しいのでこの後E6甲にて風雲の再捜索を行いました。

E6丙ボスS勝利122回 ×
E6甲MマスS勝利10回 ×
E6甲ボスS勝利4回 ×
E7甲YマスS勝利5回 ×
E7甲ボスS勝利3回 ×
E8(E6)甲MマスS勝利50回 ×
E8(E6)甲ボスS勝利34回 ○

……ギリギリB勝利ってとこでしょうかね。
というか資源30万あってもままならないってどうなんでしょ?



では最後にE7決戦時の編成と装備です。


聯合艦隊(空母機動艦隊)
20150914_73.png

前哨戦序盤は祥鳳・瑞鳳・龍鳳・大鳳の「鳳(おおとり)組」で
挑みましたが、道中ツ級と中大破で攻撃できないことが目立ちました。
そこで一隻を重巡に変更し、とにかく当てて割合ダメージでも入ればよし、
あわよくば連撃なんかも期待できる形にしました。
ペアリングにはこだわる質なので鳳組は即興の割には結構気に入っています。
またどこかで使う機会があればいいなあ…



聯合艦隊(随伴艦隊)
20150914_74.png

戦略は冬と同じ、先頭に高火力艦を配置することで
相手を確実に大破以上に追い込む先手必勝の構えです。
ただし今回は道中および昼戦で被害が増えることが予想されたため、
カットイン艦は中破前提で火力が発揮できるよう可能な限り魚雷を満載しました。
また夜戦命中に不安があった軽巡は主砲一基を軽量砲に換装して
フィット火力ボーナスの恩恵を最大限受けつつ命中と火力を両立しました。

また冬の教訓から第二艦隊は最初からフルキラキラで挑みました。
特に今回は先に第二艦隊が交戦することもあり、
道中での被弾はかなり少なく抑えられたように思います。


道中支援艦隊
20150914_75.png
決戦支援艦隊
20150914_76.png

上でも書きましたが今回は道中もボスも比較的脆い敵が多かったので
戦艦には思い切って電探を二個詰んでみました。
軽空母には江草隊が標準配備されたのでまあ当たるかなと。

それにしても今回初登場の駆逐後期型eliteはすごいですね!
重巡や軽空母クラスの中型艦を余裕でワンパンしてくる様はまるで夕立を見ているかのようです。
ん?……あれ??

艦これ comments(0) -


2015
09/09

夢の終わり

中学のとき好きだった女の子の夢を見ました。
なんとなく気になって、名前で検索してみたらFBを見つけました。
割りと珍しい名前で居住地も地元になってたからたぶん間違いない。

どうも結婚したようだ。
子供と一緒にうつってる写真もありました。

さすがに気分が凹みます……

さよなら私の青春。
お幸せに。
雑記 comments(0) -
データは全て推測値です。
空欄箇所のデータをお持ちの方がいましたら教えていただけると助かります。

ID 艦名 制空値 スロット 備考
510 軽母ヌ級 8 18/18/18
512 空母ヲ級 10 27/27/27
523 軽母ヌ級 elite 24 24/24/24
525 空母ヲ級 elite 27 30/30/30
528 空母ヲ級 flagship 28 32/32/32
536 浮遊要塞 27 30/30/30
537 浮遊要塞 27 30/30/30
538 浮遊要塞 27 30/30/30
539 泊地棲鬼 60/60/60
540 泊地棲姫 60/60/60
544 装甲空母鬼 44 80/80/0
545 装甲空母姫 48 96/96/0
546 南方棲鬼 0/0/50
547 南方棲戦鬼 41 0/70/70
548 南方棲戦姫 47 0/0/90
549 護衛要塞 29 0/35/35
550 護衛要塞 29 0/35/35
551 護衛要塞 29 0/35/35
556 飛行場姫 98 98/98/98/98 13秋E4、15夏E4前哨
560 軽母ヌ級 flagship 23 22/22/22/22
561 戦艦レ級 94 0/0/0/140
562 戦艦レ級 elite 107 0/0/0/180
565 空母ヲ級改 flagship 102 36/36/36/36
573 港湾棲姫 80 80/80/80/80 14春E3、15春E4、15夏E7、4-5前哨
574 離島棲鬼 159 90/90/90/90 14春E5
579 空母ヲ級 flagship 84 32/32/27/5 新型艦載機
581 北方棲姫 76 0/72/64/36 14夏E2前哨
582 北方棲姫 109 0/72/80/40 14夏E2最終
583 中間棲姫 110 0/64/58/58/0 14夏E3・E4前哨
584 中間棲姫 91 0/84/96/0/0 14夏E4最終
585 空母棲鬼 96 48/48/48/0
586 空母棲姫 106 60/52/56/0
587 北方棲姫 76 0/72/64/36 3-5前哨
588 北方棲姫 109 0/72/72/40 3-5最終
589 北方棲姫 72 0/64/48/36 3-5前哨(低司令部Lv)
590 北方棲姫 105 0/64/68/40 3-5最終(低司令部Lv)
599 空母水鬼 111 66/60/60/0 14秋E4前哨(低司令部Lv)
600 空母水鬼 111 66/60/60/0 14秋E4
605 港湾水鬼 94 0/0/90/90 15春E4丙前哨
606 港湾水鬼 103 0/0/108/108 15春E4甲乙前哨
607 港湾水鬼 103 0/0/108/108 15春E4丙最終
608 港湾水鬼 114 0/0/130/130 15春E4甲乙最終
609 泊地水鬼 0 0/0/0/120 15春E5乙丙前哨
610 泊地水鬼 0 0/0/0/140 15春E5甲前哨
611 泊地水鬼 0 0/0/0/160 15春E5乙丙最終・E6乙丙
612 泊地水鬼 0 0/0/0/180 15春E5甲最終・E6甲
613 港湾棲姫 53 0/0/0/180 4-5最終
614 空母ヲ級 flagship 100 32/32/27/5 新型艦載機(準赤)
615 空母ヲ級 flagship 103 32/32/27/5 新型艦載機(赤)
616 空母ヲ級改 flagship 108 36/36/36/36 新型艦載機(白)
617 空母ヲ級改 flagship 126 36/36/36/36 新型艦載機(準赤)
618 空母ヲ級改 flagship 132 36/36/36/36 新型艦載機(赤)
619 空母棲鬼 117 48/48/48/0 新型艦載機(赤)
620 空母棲姫 129 60/52/56/0 新型艦載機(赤)
625 水母棲姫 22 0/0/0/32 15夏E3・15秋E3乙前哨・丙前哨最終
626 水母棲姫 72 0/0/0/64 15夏E3・15秋E3甲前哨・乙最終
627 水母棲姫 88 0/0/0/96 15夏E3・15秋E3甲最終
631 飛行場姫 15夏E4丙最終
632 飛行場姫 15夏E4乙最終
633 飛行場姫 216 98/98/98/98 15夏E4甲最終
634 離島棲鬼 150 90/90/90/90 15夏E7丙
635 離島棲鬼 160 90/90/90/90 15夏E7乙
636 離島棲鬼 207 90/90/90/90 15夏E7甲
650 飛行場姫 34 (36) 陸爆弱
651 飛行場姫 48 (48) 陸爆中
652 飛行場姫 68 (72) 陸爆強
653 集積地棲姫 34 (36) 16冬E2丙
654 集積地棲姫 48 (48) 16冬E2乙
655 集積地棲姫 68 (72) 16冬E2甲
656 集積地棲姫-壊 48 (48) 16冬E2丙最終
657 集積地棲姫-壊 68 (72) 16冬E2乙最終
658 集積地棲姫-壊 88 (96) 16冬E2甲最終

艦これ comments(0) -
20150819_01.png


未改造150、改150、改二150を並べたコラでも作ろうと思ったけど疲れたのでとりあえずご報告まで。
何はともあれこれで当面の目標だった扶桑・山城全バージョンの
育成が完了したので、個人的には艦これも一区切りついた感じです。

あとは運改修ですかねえ。
未改造の扶桑山城はもう改修MAXになってるんですが、
改と改二(と改三予定用)はまだほとんど手付かずな状態です。
まあ、のんびりいきましょう。


さて有明方面海域も無事攻略し、意気揚々と始めた艦これ夏イベントですが。
いきなりE3で瑞穂出すのにS勝利122回ハマってすでに萎え気味です(´Д`)
ちなみについ先程S勝利11回目で海風がきて少し持ち直した模様(・∀・)

なお今回はいつもの「百合編成」「雷巡なし」に加えてさらに縛りを入れてプレイしてます。
ただここで大口叩いてクリアできなかったら格好悪すぎなのでまだ詳しくは書きません(笑)
艦これ comments(0) -
エウシュリーさんのグッズ、今回とてもよかったですね。
あの勢いで完売してるの久々に見た気がします。

通帳ケースとか確かに一つあると地味ぃーに使えそうですね。
早速ユイドラ銀行通帳ケースに桜小路銀行カードを入れてみましたよ。
ミストリアの抱き枕カバーもすごく良いんですが
それよりもまずツムギのが欲しいです。それかノエリア。
間を取って冬はツムギとノエリアの両面のやつでお願いします。



ネーブルは今回見送りました。
すでに壁という壁がルナ様で埋め尽くされてるのにB0タペストリーて・・・
ルナ様フードは少し気になっていたんですが実物見たらかなり微妙。
うーん、信仰心が足りない。
明日クッションとマグ買いに行きます。
ぶっちゃけマグもあまり気味なのでもっと他のがいいナ・・・



あと最後に寄ったパープルソフトウェアの売り子さんが、
クロノクロック?(未プレイでよくわからない)のコスプレしてたんですが、
なんかやたらキワドイ服で肩周りとかどうやって固定してるんだろうとか
足元エロいなあとか不純なこと考えながらガン見してたら、列整理の人に
「よかったらこちらの列(コスプレの人がレジしてる方)どうぞ」なんて言われてしまいました。

もちろんレジの進み具合見て振り分けただけだと思いますが。
元から並んでた列の方がむしろ進んでいたのは気のせいだと思いますが。
せっかくなので二つ返事で移動させていただきましたが。
貼るとこないとか言いながらちゃっかり舞亜のタペを購入しましたが。



なお艦これのイベントは未着手の模様。
雑記 comments(0) -


2015
07/05

Wheelpool 1.4公開

Wheelpool、久々の更新です。
クリックでアクティブウィンドウを切り替えるときの動作を
カスタマイズできるようにしてみました。

またものすごーく個人的な動機からの機能追加なので
正直これを必要とする人がどれだけいるのかわかりませんが。
というか今回の機能、ぶっちゃけホイールは関係ないですね……


開発のきっかけは例によってノベルゲームです。
私のゲーム用ノートPCの画面はあまり広くないので、他の作業(主に艦これ)と
平行して遊んでいるとウィンドウ1/3ほどが微妙に裏に隠れてしまい、
ゲームに戻る際に一回ウィンドウをクリックしてアクティブ化してやらないといけないんですね。
諸事象により左手がふさがっていることがありますのでAlt + Tab使えってのはナシです。

で、困ったことに現在出回ってる多くの作品では、クリックでアクティブ化
しようとすると同時にテキスト送りまでされてしまうんですよね。
タイトルバー(ウィンドウ枠の上部)か、タスクバーをクリックれば回避できますけど
目標が小さくて何度も往復しているとイライラしてきます。してきますよね?

ちなみに私がやったところだと唯一エウシュリーさんのゲームだけは
以前からこの点を考慮してくれていて非常に好感が持てます。
追記: Navelさんもでした。申し訳ありませんルナ様。

とにかく以前からそうした状況に不自由を感じていたため、アクティブ化のための
クリックでテキスト送りが発生しないようにしたのが今回の新機能です。
ごく限られた用途にしか使えなさそうな機能ですが
共感するところがある方はぜひ一度お試しいただければと思います。

なおゲーム(アプリ)によっては期待した動作にならないかもしれません。
その際はご容赦ください。
ソフトウェア comments(0) -
基本的な実装についてはすでにわかりやすい記事を
書かれている方がいたので詳しい解説はそちらに譲ります。

SWFファイルから画像を抽出する

ここでは透過情報を持つDefineBitsJPEG3タグを処理する際の注意点と
DefineBitsLosslessタグに対する実装、およびそれに関連したSwf2XNA側の
バグについて言及しておこうと思います。



まず透過処理について。
上記サイトのサンプルを動かしていて気がついたのですが、
抽出した画像の透過箇所が黒っぽくなってしまうという問題があるようです。
結論から言うと、これはアルファ乗算処理が二回かかっているのが原因です。

例えばRGB(255,0,0)に対してアルファ値128を適用する場合を考えます。
透過処理ではRGB各要素にアルファ値を掛けることで透過による色の変化を表現します。
(.NETのBitmapクラス等で使用されている)アルファ値は0が完全透明で
255が完全不透明を表すので、128はちょうど半透明、倍率で言うと0.5になります。

R = 255 * 0.5 = 128
G = 0 * 0.5 = 0
B = 0 * 0.5 = 0

この少し暗くなったRGB(128,0,0)がアルファ補正された色です。
そしてどうやらDefineBitsJPEG3タグのImageDataにはすでにこの補正がかかっているようです。
少なくとも今回使用した手元のSWFファイルでは全てそうなっていました。
ただSWF仕様書には書かれていないので全てのSWFに当てはまるのかはわかりません。

とにかくこの画像データをオプション無しでBitmapクラスにロードしてしまうと
通常の(=アルファ補正されていない)画像として扱われてしまいます。
この状態でpixelにアルファ値128を設定するとさらに内部で補正がかかり、
RGB(64,0,0)となり結果的に二重に補正がかかってしまうことになります。
ご覧のようにアルファ補正を行うと元の色よりも暗くなる傾向にあるため
透過部分が黒ずんだ画像になってしまうわけです。

これを回避するためにはPixelFormatを指定してBitmapクラスを生成します。
使用するフォーマットはPixelFormat.Format32bppPArgbです。

Format32bppPArgb
1 ピクセルあたり 32 ビットの形式であることを指定します。つまり、アルファ、赤、緑、および青のコンポーネントに、それぞれ 8 ビットを使用します。 アルファ コンポーネントに応じて、赤、緑、および青のコンポーネントが前乗算されます。


最初説明を見てもなんのこっちゃ意味がわからなかったのですが、
前乗算(premultiplied)というのが、上で説明したような処理のことを言っていようです。

……と、ここまでドヤ顔で説明してますが、私は画像に関しては素人なので
理屈とかは多少間違っているところもあるかもしれません。
私の拙い説明でうまく伝わらなかった方は「前乗算」「premultiplied」あるいは
「乗算済アルファ」などをキーワードに検索してみると良いでしょう。
個人的にはこちらの説明が大変わかりやすかったです。

コンポジターに必要なアルファチャンネルの知識(後編)

とりあえず以上を踏まえた実装を見ていただきましょう。
冒頭紹介したサイトのコードをベースに少し弄ってあります。


public static class DefineBitsTagExtention
{
public static Bitmap GetBitmap(this DefineBitsTag tag)
{
Bitmap bmp = null;
switch (tag.TagType)
{
case TagType.DefineBits:

// 本当は JPEGTablesTag(6) も見ないといけないが、
// ここではJPEGTablesTagにデータが存在しない(Length=0)前提で
// 画像データの前後にマーカーを入れるだけの手抜き実装

int size = tag.JpegData.Length + 4;
byte[] buf = new byte[size];

// jpeg SOI marker
buf[0] = 0xFF;
buf[1] = 0xD8;

// jpeg body
tag.JpegData.CopyTo(buf, 2);

// jpeg EOI marker
buf[size - 2] = 0xFF;
buf[size - 1] = 0xD9;

bmp = new Bitmap(new MemoryStream(buf));
// Bitmapクラスの内部でMemoryStreamを保持しているのでここでMemoryStream.Dispose()してはいけない
// 使用後に呼び出し側で責任をもってBitmap.Dispose()すること
break;

case TagType.DefineBitsJPEG2:
case TagType.DefineBitsJPEG3:

// 透過情報なし
if (!tag.HasAlphaData)
{
bmp = new Bitmap(new MemoryStream(tag.JpegData));
break;
}

// 透過情報あり
var jpeg = new Bitmap(new MemoryStream(tag.JpegData));
int w = jpeg.Width;
int h = jpeg.Height;
byte[] alpha = SwfReader.Decompress(tag.CompressedAlphaData, (uint)(w * h));

// 透過情報に対応するために再フォーマット
// tag.JpegDataは前乗算済っぽいので 32bpp'P'Argb を使用すること
// 32bppArgb を使用すると二重に乗算処理され透過箇所が黒っぽくなってしまう
bmp = jpeg.Clone(new Rectangle(0, 0, w, h), PixelFormat.Format32bppPArgb);
//bmp = bmp.Clone(new Rectangle(0, 0, w, h), PixelFormat.Format32bppArgb);

// 透過情報を合成する
// GetPixel / SetPixel は体感できるレベルで遅いのでLockBitsしてunsafeで処理
// 並列化すればさらに高速化が望めるが、実用十分な速度が得られたのでこれでよしとする
BitmapData bmpData = null;
try
{
bmpData = bmp.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, bmp.PixelFormat);
int pad = bmpData.Stride - w * 4; // 4byte境界に合わせるための端数byte(32bitなので常に揃っているはずだけど一応)

unsafe
{
byte* p = (byte*)bmpData.Scan0.ToPointer();
int i = 0;
for (int y = 0; y < h; y++)
{
for (int x = 0; x < w; x++)
{
// [0]=Blue, [1]=Grean, [2]=Red, [3]=Alpha
p[3] = alpha[i];
p += 4;
i++;
}
p += pad;
}
}
}
finally
{
if (bmpData != null)
{
bmp.UnlockBits(bmpData);
}
}
break;
}
return bmp;
}
}

画像データがバイト配列なのでMemoryStreamからBitmapを生成することになりますが
生憎Streamを扱えるコンストラクタでPixelFormatを指定できるものはありません。
なので一旦普通に読み込んでから、PixelFormatを指定してCloneしてます。
その他の注意点などもコメントで入れてあるので参考にしていただければ幸いです。



さて、次はDefineBitsLosslessの処理です。
といってもこっちはGetBitmapというそのものズバリのメソッドが
用意されているのでそれを呼ぶだけです。
さきほどの拡張メソッド名も一応これに合わせてあるんですが、
ISwfTagインターフェースに定義されてるわけじゃないのでキャストが必要です。
ふいんきだけぽりもふぃずむです。


var reader = new SwfReader(swfData);
var swf = new SwfCompilationUnit(reader);
var jpegTablesTag = swf.Tags.FirstOrDefault(x => x.TagType == TagType.JPEGTables) as JPEGTables;
if (jpegTablesTag != null && 0 < jpegTablesTag.JpegTable.Length)
{
// JPEGTablesTagにデータが存在する場合には未対応
throw new NotImplementedException();
}
var imageTags = swf.Tags.FindAll(x =>
x.TagType == TagType.DefineBits ||
x.TagType == TagType.DefineBitsJPEG3 ||
x.TagType == TagType.DefineBitsJPEG2 ||
x.TagType == TagType.DefineBitsLossless ||
x.TagType == TagType.DefineBitsLossless2);
for (int i = 0; i < imageTags.Count; i++)
{
var tag = imageTags[i];
Bitmap bmp = null;
try
{
// タグの画像データからBitmapオブジェクトを生成
switch (tag.TagType)
{
case TagType.DefineBits:
case TagType.DefineBitsJPEG2:
case TagType.DefineBitsJPEG3:
bmp = ((DefineBitsTag)tag).GetBitmap();
break;

case TagType.DefineBitsLossless:
case TagType.DefineBitsLossless2:
bmp = ((DefineBitsLosslessTag)tag).GetBitmap();
break;
}

if (bmp != null)
{
// 処理
}
}
finally
{
if (bmp != null)
{
bmp.Dispose();
}
}
}


これで一見うまく抽出できているように見えたものの、
いくつかSWFファイルを処理させてみると、斜めに引き伸ばされたような感じに
歪んだ画像が出力されることがあることに気づきました。
斜めということはなにか周期的なズレが発生するような問題だろうと予想されます。
しかし私が書いた部分ではそんな細かい処理に心当たりがなかったため
(というかGetBitmap呼んでるだけですし…)
早い段階からライブラリ(Swf2XNA)側のバグを疑っていました。

そして注意深くコードを追っていき、
画像の4byte境界を合わせるための端数を計算する処理にバグを見つけました。
DefineBitsLosslessTag.csの76行目を以下のように修正します。


if (BitmapFormat == BitmapFormat.Colormapped8Bit) // 8-bit colormapped image
{
this.ColorCount = (uint)r.GetByte() + 1;

this.isIndexedColors = true;
uint colorBytes = hasAlpha ? (uint)4 : (uint)3;
//uint padWidth = this.Width + (4 - (this.Width % 4));
uint padWidth = this.Width + ((4 - (this.Width % 4)) % 4);

// temp for debugging
uint pos = r.Position;
OrgBitmapData = r.GetBytes(curTagLen - 8);
r.Position = pos;
// end temp

ライブラリ使わせてもらっているのでほんとはpull requestとかした方がいいんでしょうが
gitとか良くわからんのでこの辺境のブログにひっそりと。
誰かの参考になれば良いなあと。
Windows/.NET comments(0) -
もう何度もやってるリビルドで、手順も頭に入って手慣れたものですが
たまにこういうトラブルと遭遇すると冷や汗が出ます。

追加するディスクにパーティション作ってスペアとしてraid5アレイにaddし、
そして除去するディスクにfailをマークします。
すると自動的にリビルドが始まる……はずなんですが何かおかしい。

cat /proc/mdstat してみると、進捗を表すバーが出てない上、
なぜかスペアディスクにも(F)マークがついてる(汗
そしてFailSpare event on /dev/md0 なんてメールが来ました。
えーナニコレ……

パーティショニングで何かミスったのかと思ってfdisk -lしてみると
そもそもデバイスが見つからないとか。んなバカな。
どうしようもないので一旦rebootかけます。
再びディスクが認識されるようになりましたのでもっかいfdisk -lしてみます。

警告: GPT (GUID パーティションテーブル) が '/dev/sdX' に検出されました! この fdisk ユーティリティは GPT をサポートしません。GNU Parted を使ってください。

確かにもともとGPTだったディスクですが
fdiskでパーティショニングした際に勝手に消えるものだと思っていました。
リビルド失敗の件とはあまり関係なさそうですが気持ち悪いので一応消しときます。

sgdisk -z /dev/sdX

で、あらためてアレイにaddしてみます。
すでにディスク一本Failしているため縮退運転になっており
addした瞬間にリビルドが始まるはず……はじまらない(大汗

今度はディスクを見失うことはありませんでしたが
ログを見てみるとATA bus errorが大量に記録されていました。
そしてsmartにはC7(CRCエラー)が出てました。
あーケーブルかも?

ケーブルと、念のためsataポートも変えてして再々チャレンジ。
今度はうまくいっているようです。
Linux comments(0) -
ブログ内検索

自作ツールなど
■棒読みちゃんプラグイン
2ch専用ブラウザ読み上げ(改良版)

■IntelliPark設定ツール
WDIDLE3 for Windows

■マウスユーティリティ
Wheelpool

■ユーザー入力監視ソフト
iDLEM@STER

■さぽている攻略 [公開終了]
さぽつ~る(さぽつーる)
アイテムリスト成型
調合成功率計算
カテゴリー別

openclose

プロフィール

百合亞

Author:百合亞
敬虔な百合信仰者かつ崇拝者
将来の夢は女の子

管理人にメール

お名前:
メール:
件 名:

りんく
2017年5月26日発売のNavel新作『月に寄りそう乙女の作法2.1エスパル』を応援しています!

「天結いキャッスルマイスター」応援中!

『想いを捧げる乙女のメロディー』2017年3月24日発売予定

オトメ*ドメイン

eye★phon(アイ・フォン)『つい・ゆり ~おかあさんにはナイショだよ~』

AXL新作第12弾「恋する乙女と守護の楯~薔薇の聖母~」 2016年1月29日発売予定!

お嬢様と秘密の乙女

カミツレ

FLOWERS

【ハピメア】応援バナー

【白雪の騎士】応援バナー

ノブレスオブルージュ

シロガネオトメ

『ヒメゴト・マスカレイド』応援中!

屋上の百合霊さん

天使の羽根を踏まないでっ

「キミとボクとエデンの林檎」公式サイトへ

『るいは智を呼ぶファンディスク』を応援しています!

『処女はお姉さまに恋してる ~2人のエルダー~』絶賛発売中!!

りんく2
藤真拓哉オフィシャルブログ
CrystalDiskInfo - 水晶雫

マリかう

Powered by FC2 Blog    Templete by hacca*days.

PR