Javaから、ABへプログラムを移植しているのですが…

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
じみっちぃ

Javaから、ABへプログラムを移植しているのですが…

#1 投稿記事 by じみっちぃ »

お世話になります。
はじめまして、じみっちぃと申します。

いま、とあるサイトに公開されているJAVAプログラムをAB向けに移植しようとしています。
内容は、画像のフィルタリングプログラムなのですが、
JAVAプログラムを自分なりに解析し、ABに書き直してみました。

ところがどうしてもうまく動かず、みなさんのお知恵を拝借できたらと思い
投稿させていただきました。

症状として、なぜかほぼ真っ白な状態になってしまうのです。
JAVAの上では、問題なく動いていたので、アルゴリズムに問題があるとは思えず…

お手数ですが、何かヒントになりそうなことがありましたらご教授いただけませんでしょうか。
よろしくお願いいたします。


移植元のプログラム(JAVA言語)
移植後のプログラム(AB言語)
じみっちぃ

色々と…

#2 投稿記事 by じみっちぃ »

あれからも、色々とMessageBoxとかを使って
そこらじゅうにトラップを仕掛け、値を分析してるんですが…

いまいち原因がつかめない状態です…
Java言語を書いたことが無いんで、色々なJava解説ページ等を参考にして
移植を進めていますが、難しいものですね。

人のプログラムを移植しようとするのも、また難しいものです。
そもそも、元プログラムの処理内容や理論を完全に理解しているわけでないので
そこが一番の問題点だと痛感しています。
へこたれそうですが、なんとか完成させたいものです。

ちなみに、元のプログラムは以下にあります。
http://www.ke.ics.saitama-u.ac.jp/kondo ... index.html
『(3)線画画像(高域強調画像)』というのが、目的の移植しようとしているフィルタです。

かなり面白いフィルタなので、何とかがんばります!
じみっちぃ

あれから・・・

#3 投稿記事 by じみっちぃ »

いろいろトライして、プログラム自体は完成したのですが、
処理速度が遅く、また悩みの種が増えてしまいました(^^ゞ

自分なりにループを減らしてみたり、無駄な処理をしないようにして見たり・・・
色々と工夫して見ましたが、P4 2.8G Mem 1G WinXP sp2 でも 4分程度かかってしまって…(@o@)

みなさんは、画像処理とか重い処理する時、
どうやって処理時間を短縮していますか?
やはりマルチスレッド化ですか?

せっかくですので、ソースコードを乗せておきます。

ソースコード1: ソースコード2: (高速化しようとあがいた方… 多少早くなりましたが、無駄にソースが長くなってしまいました…)
trio

#4 投稿記事 by trio »

とりあえず関数をなるべく呼ばないように改造してはいかがでしょうか
RGB値を取得している所はマクロを使えそうですし
DWordPtrをBytePtrにキャストして値を直む手もあります
その場合はキャストするのも時間の無駄なので
最初からBytePtrに格納してしまうのも良いかもしれません

コード: 全て選択


'Get**の代替マクロ
Const GetRed(icolor) = iColor And &HFF
Const GetGreen(icolor) = (iColor And &HFF00)>>8
Const GetBlue(icolor) = (iColor And &HFF0000)>>16

コード: 全て選択


'普通の計算、マクロ、関数呼び出しの速度比べ
Const add_m(x,y) = x+y
Function add_f(x As Long,y As Long) As Long
	add_f = x+y
End Function

Dim i As Long,j As Long
Print Time$()
For i=0 To 2^21
	j=3+5
Next
Print Time$()
For i=0 To 2^21
	j=add_m(3,5)
Next
Print Time$()
For i=0 To 2^21
	j=add_f(3,5)
Next
Print Time$()
trio

#5 投稿記事 by trio »

あ、マクロの引数間違えたorz

コード: 全て選択


Const GetRed(iColor) = iColor And &HFF
Const GetGreen(iColor) = (iColor And &HFF00)>>8
Const GetBlue(iColor) = (iColor And &HFF0000)>>16
じみっちぃ

なるほど(^o^)

#6 投稿記事 by じみっちぃ »

trioさん ありがとうございます!

Constにはマクロという使い方があるのですね。
感謝です。さっそく試してみます!

今後とのよろしくお願いしますm(__)m
返信する