Cocktail & Petite Cuisine さと

本日のお言葉:長い間、ありがとうございました。皆様のご多幸をお祈りいたします。

Delphi

[ リスト | 詳細 ]

Delphi のプログラムとかのお話。
記事検索
検索

全3ページ

[1] [2] [3]

[ 次のページ ]

どうでしょう・・・

 
昨日書いた記事、7月31日の晩ごはん、ってなってましたが、
よく日付見たら、8月1日でした(^^;;

この日は朝からバリバリ働いて、水呑みプログラマーになっていた日でした。

で、夜にカレーうどん食べた、と。

そんなわけで、記事もチョト直しておきました。。

気持ちの浮き沈みも大きくて、困っちゃいますね(^^;



さて。

今日は朝から挫けてたあたしですが、
実は思いついたことがあって、お仕事少ししました(^^

結果です。

イメージ 1


文章もちゃんときれいに出るようになりましたよ(^^


おめでとう〜〜〜って言うのはチョト早い。。

これ、メチャクチャ重いんです。

ファイルサイズも大きいし、作る時間もチョー長い。


今回は、少し詳しく書いちゃいましょうかね(^^;

興味のない方は飛ばしちゃってケッコーですが、
出来るだけわかりやすく書くので、読むだけは読んでください。


こういう画像を表現する方法は大きく分けて、2種類あります。

一つは、画像を細かく区切って、
一つ一つの小さな点の色をデータとしてまとめたビットマップ方式。

もう一つは、画像に描かれる図形や文字の情報を、
一つ一つ描く順に並べたメタファイル方式。

Windowsのソフト、ペイントで作るのはビットマップ、
デジカメで撮った写真はJPEGという方式ですが、
これもビットマップの一つで、
完全なビットマップからある方式で色を抜いてデータ量を減らしたものです。

その他、PNGなども、ビットマップのデータを圧縮した形式です。

一方のメタファイルというのは、編集するソフトもあまりないし、
一般の方はほとんど触れる機会がないと思われます。

が、PDFは、ある種のメタファイルです。

ページのサイズなどの大まかな情報と、
どこからどこまで何色でどんな太さの線を引く、
これこれのフォントでこれこれの文章を書く、
などの描画情報を集めたデータなのです。

あたしの作ったソフトで出来るのも、ある種のメタファイル。

※「ある種」と言っているのは、本来のメタファイルは Windows Metafile とよばれ、
 そのデータの形式はすでに決められているため、
 他の手順型画像ファイルは厳密にはメタファイルとは呼べないからです。

メタファイルでないと、描かれた部品を修正することができません。

ペイントで線を引いたとき、一度その線を確定しちゃうと、
あーもっと斜めの方が良かった、と思っても直すことはできませんね。

作業を取り消して、もう一度引き直すしかない。

これは、ビットマップが点の集合であり、
一度その集合に描きこまれたものは画像の一部に溶け込んでしまうから。

メタファイルは一つ一つの図形の情報を持っているため、
一番最初に描いた四角形をもう少し大きくしようとか、
青く塗りつぶそうとか、
あとから編集するのが簡単にできます。

それと、内容にもよりますが、
一般的に、ビットマップはファイルにしたときにサイズが大きくなり、
メタファイルはサイズが少なくて済みます。

例えば、A4の真っ白なページを表現する場合、
ビットマップではA4サイズ分の白い点のデータを持たなければなりませんが、
メタファイルではサイズがA4である、という情報だけ持てばよいからです。

以前音楽データについて書いたとき、
WAVE データは音そのものを全部データにしたものでサイズがデカい、
MP3 データは WAVE データのうち人の耳に聞こえない部分とかを省略して圧縮したものでチョト小さい、
MIDI データは音符一つ一つのデータを集めたものでかなり小さい、
と書きましたが、
それと同じ関係が、
ビットマップ、JPEG、メタファイルにあるわけです。


さて、ビットマップとメタファイルの違いが分かったところで。

あたしの作ったツールは次のような手順で画面表示や印刷を行っています。

1.プリンターが持っているメタファイルを描くキャンバスを借りてくる。
2・そのキャンバスにデータ通りの字形を描画する。
3.印刷するときは、そのキャンバスをそのまま印刷する。
4.画面に表示する場合には、表示する画面のキャンバスにプリンターのキャンバスを模写する。

こんな感じ。

模写する、というのは、印刷する場合の画素数と、画面の画素数が違うため、
普通にコピーしたのではたいがいはみ出してしまうので、
プリンターのメタファイルを縮小しながら描き直してる、ということです。

実際には StrechDraw という命令で、コンピュータが描き直してるんですけどね。

今回見つけたツールが使える、と思ったのは、
そのツールがメタファイル用のキャンバスを持っていたからです。

つまり、あたしのプログラムからほとんど修正なしに、
直接そのキャンバスに描きこむことができる。

描きこむ先をプリンターのキャンバスからツールのキャンバスに替えればよいだけ。

それで、最初は動かなかったけど、親切な人に教えてもらって動くようになってから、
ほとんど時間もかからずに、PDF化するプログラムに書きかえることが出来た。

駄菓子菓子。

そのツールのキャンバスには欠陥があったのです。。

出ない線はあるし、文字は詰まっちゃうし。

それで、直接描きこむのは止めて、画面に表示するときと同じように、
プリンターのキャンバスを借りて来て、そこから模写する形にしたんだけど、
模写なので、やぱ、キャンバスの欠陥はそのまま出てしまったわけです。

そのツールの内部までいじるのは無理なので、バンジー急須だったわけですが・・・


ふと、思いついた。

プリンターのメタファイルキャンバスを、
画像=ビットマップとしてツールに描きこめば、崩れようがないんじゃないか??

要するに、プリンターが描いたページを写真に撮って、
ツールのキャンバスにべた〜〜っと貼り付けちゃえばいいんじゃないかと。

やってみた。

プリンターのキャンバスをビットマップに変換して、
ツールのキャンバス全体にべた〜〜。

でも、勝手に縮小されてる・・・

これもツールのバグですね。

ツールの持つページの情報から、幅と高さを取得して、
その大きさに描きこんでも縮小されるってのはおかしい。

仕方がないので、試行錯誤で、
ページの1.3倍くらいの大きさを指定するとちょうどいいらしいというのを発見して、
とりあえず、
見られる形でPDFに出力することが可能になった。


ただし。

上に書いたように、ビットマップはメタファイルよりはるかにデータ量が多いのですよ。。

普通なら50KBくらいになるはずのPDFファイルのサイズが、3500KBとかになっちゃう・・・

そのくらいになると、ファイルに書きこむのに1分くらいかかるからねぇ。。

3500KBって書くと良く分かんないけど、3.5MBですよ、メガ!!

やぱ、現実的には、使えない。。


同じように、メタファイルキャンバスを持つ別のツールを探さないとイケナイな〜〜

最初は、コリコリとプレーンのPDFを書くことを考えたけど、
あたしのプログラムは、Windowsの機能だけでは表現できないところを表現できるように、
ものすごく凝った作りになってるんですよ。

例えば、−・−・− 一点鎖線とか、
キャンバスに「これから描く線は一点鎖線ですよ」って教えておけば、
ピーって線を引いたときに、一点鎖線になってくれる。

んだけど、この線と点の間隔は常に一定なので、
太い線で一点鎖線を描くと、スキマが潰れちゃって一点鎖線にならない。

そこで、あたしのプログラムでは、点線系が指定されたときは、
太さを考慮して、線と点の間隔を計算し直して、
一つ一つ細かい線を描くように作ってある。

文字にしても、ワープロでは普通の、均等割り付けとか、両端揃えは、
windows の基本的な仕様では表現できないので、
文字の大きさ、文字数から計算して、1文字ずつ書いてたりする。

複数行のときの、縦方向の均等割りとか両端揃えも用意してるので、
縦も横も均等、って指定されたら、
本当に、全部1文字ずつ位置を計算して書いてるのよ。。

あと、行頭に「、。・・・」などが来ないようにする禁則処理も、
windows の基本仕様にはないので(英語用のならある)、
1行に入る文字数を計算して、
次の行の先頭に禁則文字が来る場合は、前の行の末尾に移動して、
その分文字がはみ出したりしないように、そこだけは両端揃え処理にして文字を詰め込んだり・・・

ショージキ言って、自分で自分のプログラム見て何やってんだか分かんないくらい複雑。

その処理を、全部、PDF用に追加して行かなきゃいけないかと思うと、
オテアヘ〜〜〜〜
って気分になっちゃうのですよ。。

まぁ、それでも、コツコツやる気ではいますけどね。

「良さげ」じゃなくて「良い」ツールが見つかるまで、
コツコツやるっきゃない。

で、ほとんど出来上がるってときに、良いツールが見つかったら、
コツコツは全部捨てる!!

その方がプログラム的に美しいもの。

美しくないプログラムなんて、プログラムじゃないわ。


その点、ガイジンは割り切ってるよね〜〜

PDFの仕様にしたってグチャグチャだし、
YoutubeやFacebookなんかも使い勝手がメチャクチャだし。

あたしなら、一つの機能の追加でプログラムが汚くなっちゃうなら、
全部作りかえるからね(^^;;

そのために、昔からスタートダッシュで一気に進めてきたのよ。

見直しと仕様変更対応の時間が十分取れるように。

関係ないけど、夏休みの宿題だって、
日記系と育成系以外は7月中に終わってたしね(^^

あたしの人生も、20代で終わってた・・・・??



しまった、書くのに夢中になって、こんな時間・・・・

これから、ご飯作って食べま〜〜す(^^;;


イメージ 1

 
もう、今年の夏で丸5年になっちゃうあたしのブログ暦。

アップした画像も数知れず・・・

イチオー、アップする画像のファイルサイズは出来るだけ小さくしてますけど、
2GBという制限は、いずれやってくる。。

そこで、最近は画像の枚数が多い記事の場合、
レンタルで借りてるWEBスペースに画像をアップして、
それを表示するようにしています。

ま、記事と一緒に画像をアップしないとランダムに引っかからないので、
最低1枚、メインの写真は添付してますけどね(^^


そのとき、デジカメのつけたファイル名だと長ったらしくてメンドーなので、
ある記事に載せる写真は、1〜連番で名前をつけなおしてアップしてます。

01.jpg
02.jpg
:
:

とか、

gohan01.jpg
gohan02.jpg
:
:

とか。。


でー、いちいち手でファイル名を直すのはメンドーなので、
作っちゃったプログラムが、コレです(^^


あたしがWEBに画像をアップする場合は、
まず、フォルダーを作ってアップする画像をコピーし、
そのフォルダーに対してプログラムを流して連番に変えます。

もちろん、WEBにアップするだけに利用するのではなく、
ファイルの整理にも使うことが出来ます。

たとえば、2009年のクリスマスの写真をまとめておきたい、なんてとき

D:\写真\2009xmas

などというフォルダーを作って、クリスマスの写真をコピー。

このプログラムを使って、01.jpg〜36.jpgまで連番で整理〜
などとできるわけですね(^^


さらに、その中で、ケーキの写真、子供の写真・・・と分けたければ、
フォルダーで分けるだけでなく、
ケーキの写真を選択して

D:\写真\2009xmas\cake01.jpg
D:\写真\2009xmas\cake02.jpg
:

子供の写真を選択して

D:\写真\2009xmas\kodomo01.jpg
D:\写真\2009xmas\kodomo02.jpg
:
:

などとすることもできます。


名づけ対象は写真だけじゃないので、
文書ファイルを連番で整理、などもできます。

※ただし、他のソフトウェアで編集したファイルの場合、
 「最近使ったファイル」などとの整合性は失われます。
 出来上がったファイルを整理する場合のみに使うのが良いでしょう d(^^


ダウンロードは、こちらのファイルをお好みのフォルダーにコピーするだけ。

デスクトップやスタートメニューに載せる場合は、手動で(^^;、
ショートカットを作ってやってください。。


使い方は、

1.左上のボックスからドライブを選択
2.その下のボックスからフォルダーを選択
3.右のリストから連番を付けるファイルを選択(※1)
4.「書式」に書式文字列(※2)を入力
5.「開始」に連番付け開始番号を入力
6.OKボタンをクリック
7.確認画面でOKをクリック

以上です。

実行すると、ファイル名を元に戻すことは出来ません


(※1)ctrl+A を押すと、全て選択できます。

(※2)書式文字列は以下の通り。

「#」→1,2,3・・・
「00」→01,02,03・・・・
「000」→001,002,003・・・010,011・・・
「#00」→01,02,03・・・98,99,100・・・
「A00」→A01,A02,A03・・・
「00A」→01A,02A,03A・・・

など。

「00」で連番が100以上になるなど桁あふれすると、
そのまま、100,101・・になります。

「00」や「#」などの書式指定文字列がない場合、
結果は保証しません。


上の例、ケーキの写真を連番にする場合は、

1.Dドライブを選ぶ。
2.「写真」フォルダーを選び、その下の「2009xmas」を選ぶ
3.右のリストからケーキの写真だけ選ぶ
4・「書式」に「cake00」と入力
5.「開始」に「1」と入力
6.OKボタンをクリック
7.確認画面でOKをクリック

で出来ます♪


Windows専用。

たぶんVista以後のOSでは動きません(^^;

XPからそのチョト前くらいのOSなら動くと思います。。



ご使用の結果、何らかの不都合が生じたとしても、
一切の責任は負いませんので、ご了承ください(^皿^)
 
今日は3本中2本、ランダム外したので、
悔し紛れに、
昔作ったスクリーンセーバーをアップ(^^;


ウェイト時間が過ぎると、表示されている画面がさらさらと崩れて行きます。

イメージ 1


全部崩れ落ちた後どうなるかは、お楽しみ(^^


お楽しむほどのものでもないけどねw


↓こいつを適当な場所にダウンロードして、



エクスプローラーで表示したら、右クリック。

「インストール」を選択して、設定を決めて、OKボタンをクリック。


設定は、

イメージ 2


背景色と、崩れる粒子のサイズを指定してね〜



たぶん、winのNT系(XP含む)なら動くと思います。。

ビスタでは、おそらく、ムリ。。
2000やMEも、おそらく、ムリ。。

動作環境を確かめられるほどPC持ってないのでー(^^;


もしかして、ダウンロードして実行した結果、
何らかの不都合が生じるかもしれませんが、
一切の責任は負いませんので、ご了承ください(^皿^)

イメージ 1

これは、r−ペントミノの成れの果てです。
枠外には6機のグライダーが飛び去っています。

ふふふ。
なんのこっちゃ、わからないと思うので、説明しますね〜。
わかる人は、結構マニアックですね(笑)。

これは、「ライフゲーム」と呼ばれる、平面上の生滅シミュレーションの画像です。
こちらによると、
 ライフは60年代の終わりごろにイギリスはケンブリッジ大学の数学者ホートン・コンウェーが作ったシミュレーションです。簡単なルールで碁盤の上のセルを操作し、そのパターンを見るだけなのですが、セルの変化は複雑です。この時代は全て手作業でした。コンピューターに移植されるとファンの数は世界中に爆発的に増加しました。このライフゲーム人気は驚くほどでした。米国「タイム」誌は「プログラマーの気晴らしに使用され、企業や研究期間のコンピュータに何百万ドルもの損害を与えている」と報じたほどです。このゲームの初期配置はそれこそ星の数ほどあり、星と同様にそれぞれのパターンにはいろいろな名前が付けられています。
ということです。

ゲームは、「初期配置」と呼ばれるパターンを一定の規則で変形していく、という単純なものです。
しかしながら、↑にもあるようにその「変化は複雑」で、思いも寄らないのです。
「手作業」では、複雑で面白いパターンになるほど間違いも起きやすいし、何よりも面倒なのですが、コンピューターでプログラミングすれば(プログラムそのものは結構簡単♪)、本当にいくらでも時間が潰せちゃうんです(笑)。
まぁ、オタクの部類ではありますが・・・

で、その「規則」ですが、まず、平面を碁盤状に区切ります。
そして、次の3つの規則に従って変形します(変形の1ステップを「世代」と呼ぶことにします)。
下の例では上の画像とは逆に □は空白、■は存在を表します。また、◎以外のマスは変形させていません。

1.あるマス(◎)の周囲(8マス)に、ちょうど2個存在する場合には、そのマスの状態は継続する。

 □□□□□
 □■□□□
 □□◎□□
 □□■□□
 □□□□□
 ◎が■であれば次世代も■、□であれば□

2.あるマス(◎)の周囲(8マス)に、ちょうど3個存在する場合には、そのマスの状態に関わらず次世代には存在する。

 □□□□□   □□□□□ 
 □■□□□   □■□□□ 
 □□◎■□   □□■■□ 
 □□■□□   □□■□□ 
 □□□□□   □□□□□ 
  前世代      次世代

3.あるマス(◎)の周囲(8マス)に、2個未満、ないし4個以上存在する場合には、そのマスの状態に関わらず次世代には空白になる。

 □□□□□   □□□□□ 
 □■□□□   □■□□□ 
 □■◎■□   □■□■□ 
 □□■□□   □□■□□ 
 □□□□□   □□□□□ 
  前世代      次世代

たったこれだけの規則で、とても面白い現象が起きるんですねぇ。。

たとえば、

 □□□□□
 □□■□□
 □□□■□
 □■■■□
 □□□□□

これは「グライダー」と呼ばれるパターンで、次のように変化します。

 □□□□□□ □□□□□□ □□□□□□ □□□□□□ □□□□□□ 
 □□■□□□ □□□□□□ □□□□□□ □□□□□□ □□□□□□ 
 □□□■□□ □■□■□□ □□□■□□ □□■□□□ □□□■□□ 
 □■■■□□ □□■■□□ □■□■□□ □□□■■□ □□□□■□ 
 □□□□□□ □□■□□□ □□■■□□ □□■■□□ □□■■■□ 
 □□□□□□ □□□□□□ □□□□□□ □□□□□□ □□□□□□ 

2世代で45°の線に対して反転し、4世代で元の形に戻って右下に移動します。

 □□□□□□
 □■□□■□
 □□■■■□
 □□□□□□

このパターンは、顔のようなパターンを次々と生み出して行きます。

 □□□□□□□□□□□□□□□□□□□□□□□□□□□□
 □□□□□□■□□□■■□□□□□■■□□□□■■□□□
 □■■□□■□■□□■□■□□□■□□■□□■□□■□□
 □■■□□□■□□□□■□■□□■□■□□□□■■□□□
 □□□□□□□□□□□□■■□□□■□□□□□□□□□□
 □□□□□□□□□□□□□□□□□□□□□□□□□□□□

これらのパターンは次世代にも変化しない安定型です。

 □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
 □□■□□□■■□□□□□□□□□□□□□□□□□□□□□□□
 □□■□□□■■□□□□□■■■□□□□□□■□□□□■□□□
 □□■□□□□□■■□□□□■■■□□□■■□■■■■□■■□
 □□□□□□□□■■□□□□□□□□□□□□■□□□□■□□□
 □□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□

これらのパターンは、2世代ないし数世代で元のパターンに戻る繰り返し型です。

表題の画像は、下のr−ペントミノと呼ばれるパターンから、実に1100以上の世代を経て、上記のグライダーを6機飛ばして、最終的に安定パターンになったものです。

 □□□□□
 □□■■□
 □■■□□
 □□■□□
 □□□□□

それまでの間には、落ち着くかと思えば大きく成長したり、急速に安定型になったり、グライダーが飛び立ったものの他の存在と衝突して消滅してしまったり、一大スペクタクル(謎)を展開し、見るものの目を釘付けにしてしまいます。
r−ペントミノではなくても、適当に配置した初期パターンからグライダーが発射されると、勝ったようなへんな喜びがありますね。
グライダーの行く手を遮りそうなパターンが早く消滅するように祈っていたり(危)。

まぁ、つまらない人には全然面白くないと思いますが。。


あたしが「ライフゲーム」と初めて出会ったのは中学生の頃だったと思います。
マーチン・ガードナーの「別冊サイエンス 数学ゲームI」で見かけて興味を持ちました。
が、当時はコンピューターなんてなかったので、やがて忘れてしまいました。
コンピューター関係の仕事に就いてから、ふと思い出して、
プログラムを作って、本当に何がしかの損害を会社に与えたりしてました(爆)。
まぁ、その当時のコンピューターは処理が遅くて、50×50のマス目でさえ苦しかった。

今回、精神安定の目的で久々に組んでみましたが、256×192(+画面外部分)でも速い速い。
あらためて、PCの進歩には驚かされましたね〜。


ちなみに、現在プログラムをアップできる環境にないので、後日アップしたいと思います。
↑で紹介したサイトにもプログラムがあるようですが、試してないので詳しいことはわかりません。
興味のある方は、ダウンロードして、時間を無駄にしてください(核爆)。


プログラムを組んでみたい方へのヒント・・

2次元配列は、画面表示部分の上下左右に5マス分ほど余分に取っておくと、グライダーの飛び去りをうまくごまかせます。。

シンプルな組み方としては、パターン用配列とカウント用配列を用意して、世代交代時に次の処理を行います。
1.カウント用配列を0クリア。
2・パターン用配列の(x,y)が存在の場合、カウント用配列の(x-1,y-1),(x-1,y),・・・,(x+1,y+1)に1を加算(パターン用配列の最小&最大行・列については処理しないのが楽)。
3.カウント用配列の(x,y)が3の場合パターン用配列の(x,y)を存在に、0,1,4,5,6,7,8の場合は空白にする(2の場合は何もしない=状態維持)。
4.必要に応じて、パターン用配列から画面に表示。

固定パターンや繰り返しパターンで終了にする場合は、世代の履歴を取っておき比較する必要がありますが、配列全体の比較が一発で行えない言語の場合は、ビット列(最終的には文字列ですが・・)または文字列に置き換えて履歴を持つのが良いでしょう。

リードソロモン打破!

イメージ 1

つ、ついに、打破しました (T-T)

ようやく、親切なサイトを発見でき、プログラム化することができました。

修士論文のやつは、たぶん、極めて汎用的なプログラムなのでしょう。
QRコード用に限定すれば、プログラムそのものはかなりシンプルでした。

リードソロモン誤り訂正語作成のロジックは、画像で示した部分だけです。
悩んだ期間が長かったわりには短いですよね。

まぁ、このほか、整数表現<−>指数表現の変換テーブルやら何やら、面倒な打ち込みはたっぷりありましたが。。

全3ページ

[1] [2] [3]

[ 次のページ ]


.

ブログバナー

聡美姐
聡美姐
女性 / O型
人気度
Yahoo!ブログヘルプ - ブログ人気度について
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

お友だち

屋根のない車

お役立ち

リンク

検索 検索

過去の記事一覧

よしもとブログランキング

もっと見る

[PR]お得情報

いまならもらえる!ウィスパーWガード
薄いしモレを防ぐパンティライナー
話題の新製品を10,000名様にプレゼント
ふるさと納税サイト『さとふる』
11/30まで5周年記念キャンペーン中!
Amazonギフト券1000円分当たる!
いまならもらえる!ウィスパーうすさら
薄いしモレを防ぐ尿ケアパッド
話題の新製品を10,000名様にプレゼント

その他のキャンペーン


プライバシー -  利用規約 -  メディアステートメント -  ガイドライン -  順守事項 -  ご意見・ご要望 -  ヘルプ・お問い合わせ

Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.

みんなの更新記事