画像処理 その6
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/02/21(火) 17:31:10・初学者の質問に対してやさしく(的を外れた)解答を与える
・その道の玄人も大歓迎
前スレ
http://pc8.2ch.net/test/read.cgi/tech/1127705848/
過去スレッド
画像処理 その4
http://pc8.2ch.net/test/read.cgi/tech/1107854973/
画像処理 その3
http://pc5.2ch.net/test/read.cgi/tech/1090897159/
画像処理 その2
http://pc5.2ch.net/test/read.cgi/tech/1054545005/
画像処理
http://pc5.2ch.net/tech/kako/992/992671330.html
0153デフォルトの名無しさん
2006/03/04(土) 21:49:46それは任意サイズや多角形マスクも考慮してやってますか?
0154デフォルトの名無しさん
2006/03/04(土) 22:09:03ミニマップが有効なのはぴったり規定サイズのときだけですけどね
0155デフォルトの名無しさん
2006/03/04(土) 22:15:40任意サイズやマスクのせいで遅いなら、見るべきはαの処理じゃないよね。
拡大縮小アルゴリズムとマスク処理は何を使ってどう書いているの。
0156デフォルトの名無しさん
2006/03/04(土) 22:38:080157デフォルトの名無しさん
2006/03/04(土) 23:06:00もっともっと細かくどの部分にどれだけの時間がかかるか調べたら?
5秒もあればボトルネックをはっきり特定できるでしょ。
0158デフォルトの名無しさん
2006/03/04(土) 23:11:52それこそ1msとかのレベルじゃないと拡大やマスクやGDI描画にかかるコストの総和になってくるので
どこがネックかといえば拡大とブレンドですね
これをなんとかして2msくらいまでおさえたい
0159デフォルトの名無しさん
2006/03/04(土) 23:41:29それと現時点で各処理にどのくらいかかっているか、
とかもっと具体的に書かないとこれ以上アドバイスしようが無いと思う。
0160デフォルトの名無しさん
2006/03/04(土) 23:51:400161デフォルトの名無しさん
2006/03/04(土) 23:53:57そんなものは気が向いたらやります
>>138のように劇的なものを求めてるだけです
>>138のだけではすべてがそろいません
アルファブレンドされた10枚の壁紙サイズの合成画像をマスク処理もやってです拡大縮小もです
操作が行われてから100msでください
操作とは倍率変更、透過率変更、色変更、移動などがあります
すべての操作において100msです
アルゴリズムの工夫だけでは不可能です
>>138のような手法がほしいです
>>138だけでは全体像が見えないです
0162デフォルトの名無しさん
2006/03/04(土) 23:54:370163デフォルトの名無しさん
2006/03/05(日) 00:00:41内部でなにをやってるかは全部把握してるので私はわかりますが
今やってるのが元のサイズのままでアルファブレンドで画像を作ります
これは変更があったときだけ
W_PAINTにこの画像を拡大縮小してBitBltです
拡大縮小は早いですよかなりね
ブレンド方法は>>149に書いたとおり
ブレンドとマスクは同時にやってます
これが更新時だけですが5秒近いです
0164デフォルトの名無しさん
2006/03/05(日) 00:11:500165デフォルトの名無しさん
2006/03/05(日) 00:15:15wxWidgetsはWindowsネイティブをラップしてるだけで内部はまったく同じです
アルファブレンドをMFCやSDIやBCCで実装するのにそれぞれのスレにいかないといけないんですか?
0166デフォルトの名無しさん
2006/03/05(日) 00:18:45お前脳味噌腐ってる?
0167デフォルトの名無しさん
2006/03/05(日) 00:21:59wxImage::Scale(w,h)
って書くだけです
画素情報は
wxImage::GetRed(x,y)
です
unsingned char * wxImage::GetData()
もあります
こんな羅列書いて理解できますか?
0168デフォルトの名無しさん
2006/03/05(日) 00:25:230169デフォルトの名無しさん
2006/03/05(日) 00:25:520170デフォルトの名無しさん
2006/03/05(日) 00:28:54アフィン変換してみたけど、100msなんて余裕だな。
0171デフォルトの名無しさん
2006/03/05(日) 00:30:02for(x=0;x<dest.GetWidth();x++){
for(y=0;y<dest.GetHeight();y++){
image = layer[i];
mask = layermask[i];
if(!INRECT(mask,x,y))continue;
if(!INRECT(image,x,y)continue;
if(mask.GetRed(x,y){
int r = dest.GetRed(x,y) ...................
int g
int b
dest.SetRGB(x,y,r,g,b);
}
}
}
ざっと書くとこんな感じ
0172デフォルトの名無しさん
2006/03/05(日) 00:31:14専用クラスですか?
0173デフォルトの名無しさん
2006/03/05(日) 00:32:140174デフォルトの名無しさん
2006/03/05(日) 00:32:500175デフォルトの名無しさん
2006/03/05(日) 00:37:46ふつーはな、単なるunsigned char[]あたりに画像展開してそこで全部の処理を済ませてから最後の表示だけAPIでやる。
まぁ、WindowsならDIBSectionとか使うが。
0176デフォルトの名無しさん
2006/03/05(日) 00:52:280177デフォルトの名無しさん
2006/03/05(日) 01:00:48GetDataメソッドでポインタはとれるよ
内容は[RGBRGBRGB]ね
ふつーははわかるがそうすることで劇的に早くなるとは思えないわけですが
せいぜい2倍とかじゃないですかね?足りませんよ?
0178デフォルトの名無しさん
2006/03/05(日) 01:02:47GetRed毎に座標をポインタに計算してunsigned char をreturnしてるだけです
0179デフォルトの名無しさん
2006/03/05(日) 01:04:17事前に矩形の重ね判定やって必要な部分だけループ回せ。
0180デフォルトの名無しさん
2006/03/05(日) 01:06:00そうすれば10枚100msいけますか?
0181デフォルトの名無しさん
2006/03/05(日) 01:09:12とりあえずレイヤ一枚に対していちいちウィンドウシステム側の
バッファをワークエリア代わりにするのやめれ。
0182デフォルトの名無しさん
2006/03/05(日) 01:10:220183デフォルトの名無しさん
2006/03/05(日) 01:11:080184デフォルトの名無しさん
2006/03/05(日) 01:12:10それはわかってるけど100msはいかないでしょ?
0185デフォルトの名無しさん
2006/03/05(日) 01:13:25釣りじゃないとするとそうとしか考えられないよね。
処理速度上げたいっていうなら自分でメモリ確保して、ポインタでループまわしたらいいのに。
0186デフォルトの名無しさん
2006/03/05(日) 01:13:540187デフォルトの名無しさん
2006/03/05(日) 01:16:16,.ィ , - 、._ 、
. ,イ/ l/  ̄ ̄`ヽ!__
ト/ |' { `ヽ. ,ヘ
N│ ヽ. ` ヽ /ヽ / ∨
N.ヽ.ヽ、 , } l\/ `′
. ヽヽ.\ ,.ィイハ | _|
ヾニー __ _ -=_彡ソノ u_\ヽ、 | \ レイヤーが数百枚だとか
.  ゙̄r=<‐モミ、ニr;==ェ;ュ<_ゞ-=7´ヽ > CPUが486とかいうオチの
. l  ̄リーh ` ー‐‐' l‐''´冫)'./ ∠__ 釣りだったんだよ!
゙iー- イ'__ ヽ、..___ノ トr‐' /
l `___,.、 u ./│ /_
. ヽ. }z‐r--| / ト, | ,、
>、`ー-- ' ./ / |ヽ l/ ヽ ,ヘ
_,./| ヽ`ー--‐ _´.. ‐''´ ./ \、 \/ ヽ/
-‐ '''"  ̄ / :| ,ゝ=< / | `'''‐- 、.._
/ !./l;';';';';';';\ ./ │ _
_,> '´|l. ミ:ゝ、;';';_/,´\ ./|._ , --、 | i´!⌒!l r:,=i
. | |:.l. /';';';';';|= ヽ/:.| .|l⌒l lニ._ | ゙ー=':| |. L._」 ))
l. |:.:.l./';';';';';';'! /:.:.| i´|.ー‐' | / | |. ! l
. l. |:.:.:.!';';';';';';';'| /:.:.:.:!.|"'|. l' │-==:|. ! ==l ,. -‐;
l |:.:.:.:l;';';';';';';';| /:.:.:.:.:| i=!ー=;: l | l. | | / //
l |:.:.:.:.:l;';';';';';';'|/:.:.:.:.:.:.!│ l l、 :| | } _|,.{:: 7 ))
l |:.:.:.:.:.:l;';';';';'/:.:.:.:.:.:.:.:| |__,.ヽ、__,. ヽ._」 ー=:::レ' ::::::|; 7
. l |:.:.:.:.:.:.l;';';'/:.:.:.:.:.:.:.:.:.|. \:::::\::::: ヽ ::::::!′ :::| .:/
. l |:.:.:.:.:.:.:∨:.:.:.:.:.:.:.:.:.:.:.! /ヽ::: `::: :::: ....::..../
0188デフォルトの名無しさん
2006/03/05(日) 01:16:550189デフォルトの名無しさん
2006/03/05(日) 01:17:17論点は100msオーダーを出す方法ですよ
最適化うんぬんは関係ありません
速度把握するために組んだコードなので最適化されてなくて当然です
まず組んでみて最適化したときの速度を予測します
いきなり最適化からはいるとデバッグ作業で何倍も時間を使います
そこで私なりに予測した結果この方法で100msオーダーは出せないという結論になったから
ここで質問してるわけです
経緯を説明するとこんな感じです
0190デフォルトの名無しさん
2006/03/05(日) 01:18:58ぜんぜん話題がそれるけど、画像処理は走査線を意識してやる人が多いからxが内側でコーディングする人の方が多いよ
0191デフォルトの名無しさん
2006/03/05(日) 01:20:40ああ、今書いたから外側になってるわw
0192デフォルトの名無しさん
2006/03/05(日) 01:27:200193デフォルトの名無しさん
2006/03/05(日) 01:27:310194デフォルトの名無しさん
2006/03/05(日) 01:32:250195デフォルトの名無しさん
2006/03/05(日) 01:32:30その最適化したほうほうで100ms余裕だというのなら私にはそれをためす価値が出てくるわけですよ
使ってる平均的なものならね
多少高くでも1Ghzあたりでどうなるかくらい想像がつくでしょ
1GHxで100msです!!
えーっとCeleronにしといてw
0196デフォルトの名無しさん
2006/03/05(日) 01:35:07その辺詳しく
0197デフォルトの名無しさん
2006/03/05(日) 01:35:220198デフォルトの名無しさん
2006/03/05(日) 01:36:42なんだロジックを否定したいがためだけにここにいたんですか?w
0199デフォルトの名無しさん
2006/03/05(日) 01:39:450200デフォルトの名無しさん
2006/03/05(日) 01:42:21MMX以外の今まで言われたことをこなしてから出直してこい。
0201デフォルトの名無しさん
2006/03/05(日) 01:43:34DIBSectionを直接アクセスするけど、特に最適化なし。
多分、もまいのコードは遅すぎだと思われ。
0202デフォルトの名無しさん
2006/03/05(日) 01:57:01ありがとう
そこまで実測値だしてくれると説得力がありますね
糸口が見つかりました
0203デフォルトの名無しさん
2006/03/05(日) 02:00:19,.ィ , - 、._ 、
. ,イ/ l/  ̄ ̄`ヽ!__
ト/ |' { `ヽ. ,ヘ
N│ ヽ. ` ヽ /ヽ / ∨
N.ヽ.ヽ、 , } l\/ `′
. ヽヽ.\ ,.ィイハ | _|
ヾニー __ _ -=_彡ソノ u_\ヽ、 | \ 当たり前のことをやってから
.  ゙̄r=<‐モミ、ニr;==ェ;ュ<_ゞ-=7´ヽ > でかい口叩きやがれ!!
. l  ̄リーh ` ー‐‐' l‐''´冫)'./ ∠__ 相手してくれた全員に
゙iー- イ'__ ヽ、..___ノ トr‐' / 誤れ!!!!
l `___,.、 u ./│ /_
. ヽ. }z‐r--| / ト, | ,、
>、`ー-- ' ./ / |ヽ l/ ヽ ,ヘ
_,./| ヽ`ー--‐ _´.. ‐''´ ./ \、 \/ ヽ/
-‐ '''"  ̄ / :| ,ゝ=< / | `'''‐- 、.._
/ !./l;';';';';';';\ ./ │ _
_,> '´|l. ミ:ゝ、;';';_/,´\ ./|._ , --、 | i´!⌒!l r:,=i
. | |:.l. /';';';';';|= ヽ/:.| .|l⌒l lニ._ | ゙ー=':| |. L._」 ))
l. |:.:.l./';';';';';';'! /:.:.| i´|.ー‐' | / | |. ! l
. l. |:.:.:.!';';';';';';';'| /:.:.:.:!.|"'|. l' │-==:|. ! ==l ,. -‐;
l |:.:.:.:l;';';';';';';';| /:.:.:.:.:| i=!ー=;: l | l. | | / //
l |:.:.:.:.:l;';';';';';';'|/:.:.:.:.:.:.!│ l l、 :| | } _|,.{:: 7 ))
l |:.:.:.:.:.:l;';';';';'/:.:.:.:.:.:.:.:| |__,.ヽ、__,. ヽ._」 ー=:::レ' ::::::|; 7
. l |:.:.:.:.:.:.l;';';'/:.:.:.:.:.:.:.:.:.|. \:::::\::::: ヽ ::::::!′ :::| .:/
0204デフォルトの名無しさん
2006/03/05(日) 02:03:39ざっと千万回ほど繰り返すと流石に数十分掛かるけどこれってアルゴリズムを見直せば速くなりますか?w
0205デフォルトの名無しさん
2006/03/05(日) 02:04:570206デフォルトの名無しさん
2006/03/05(日) 02:05:16具体的数字をだせと何度言ってもけむにまくばっかりだし
誤る?!必要性がないw
0207デフォルトの名無しさん
2006/03/05(日) 02:05:16そうだとしたら、直接アクセスするのと比べてかな〜り遅くなるべ。
0208デフォルトの名無しさん
2006/03/05(日) 02:07:36a + (a -b) x apha
こっちのがでかいんじゃないかね?
0209デフォルトの名無しさん
2006/03/05(日) 02:09:26>>201 = >>203 だし。
>>201のコードの内容は、>>171が出た後にみんなが言ってるぐらいしかやってないんだよね。
当たり前のことをやってからでかい口きけと。
0210デフォルトの名無しさん
2006/03/05(日) 02:10:120211デフォルトの名無しさん
2006/03/05(日) 02:11:15恩を仇
0212デフォルトの名無しさん
2006/03/05(日) 02:14:515秒もかかるからなんとかしてくれって話じゃなかったの?
ヘタな釣りだな。釣られたけど。
0213デフォルトの名無しさん
2006/03/05(日) 02:18:23100msは目標ですよ。
機能性文盲ですか?
0214デフォルトの名無しさん
2006/03/05(日) 02:19:350215デフォルトの名無しさん
2006/03/05(日) 02:25:05ピクセルにアクセスするのにGetなんとか使ってる癖に>>131でMMXとか書いてるよwww
ほんとになんも知らないんだな
チキショウ!釣りだといってくれwwハライテー
0216デフォルトの名無しさん
2006/03/05(日) 02:30:23繰り返しの回数減らせばいいんじゃね。
0217デフォルトの名無しさん
2006/03/05(日) 02:49:310218デフォルトの名無しさん
2006/03/05(日) 02:52:44grr_layer layer = m_layerlist[idx];
x = y = 0;
w = dest.GetWidth();
h = dest.GetHeight();
if(x < layer.m_x){
x=layer.m_x;
w = w - x;
}
if(y < layer.m_y){
y=layer.m_y;
h = h - y;
}
if(x + w > layer.m_x + layer.m_image.GetWidth())w = layer.m_x + layer.m_image.GetWidth() - x;
if(y + h > layer.m_y + layer.m_image.GetHeight())h = layer.m_y + layer.m_image.GetHeight() - y;
unsigned char *ptr_dest = dest.GetData();
unsigned char *ptr_image = layer.m_image.GetData();
unsigned char *ptr_mask = layer.m_mask.GetData();
ptr_dest += y * dest.GetWidth() * 3 + x * 3;
int ix = x - layer.m_x;
int iy = y - layer.m_y;
ptr_image += iy * layer.m_image.GetWidth() * 3 + ix * 3;
ptr_mask += iy * layer.m_image.GetWidth() * 3 + iy * 3;
int span_dest = dest.GetWidth() - (x + w) + x;
int span_image = layer.m_image.GetWidth() - (x + w) + x;
span_dest*=3;
span_image*=3;
0219デフォルトの名無しさん
2006/03/05(日) 02:53:17for(i=y;i<=y+h;i++){
for(j=x;x+w;j++){
if(*ptr_mask){
for(k=0;k<3;k++){
int v = ptr_image[k] + (ptr_dest[k] - ptr_image[k]) * alpha;
}
}
ptr_dest+=3;
ptr_image+=3;
ptr_mask+=3;
}
ptr_dest += span_dest;
ptr_image += span_image;
ptr_mask += span_image;
}
これでいいだろw
コンパイラがいかれたw
0220デフォルトの名無しさん
2006/03/05(日) 02:57:22厨の相手乙。素直なコードだとおもた。
VCがどうした?
0221デフォルトの名無しさん
2006/03/05(日) 03:01:06厨が書いたコードですが何か?w
0222デフォルトの名無しさん
2006/03/05(日) 03:02:54いまさらだけど君ながらの予測がおかしいでFAじゃね?
ちまちました最適化のひとつが速度を2倍に上げるとわかったら
そんな方法を10個並べればktkr!っていうのが基本だから、
何かひとつのブレイクスルーですっきり速度100倍なんて期待しない方がいいよ。
0223デフォルトの名無しさん
2006/03/05(日) 03:03:41で、100ms秒切った?
0224デフォルトの名無しさん
2006/03/05(日) 03:07:38速度が倍になる最適化10個並べたら1024倍高速になるぞ。
0225デフォルトの名無しさん
2006/03/05(日) 03:11:450226デフォルトの名無しさん
2006/03/05(日) 03:13:23何か問題でも?
0227デフォルトの名無しさん
2006/03/05(日) 03:18:38ソースバグいっぱいあったけど
切った切ったw
0228デフォルトの名無しさん
2006/03/05(日) 03:19:530229デフォルトの名無しさん
2006/03/05(日) 03:20:590230デフォルトの名無しさん
2006/03/05(日) 03:25:53描画にも20msかかるとか。
ttp://diarynote.jp/d/35749/20051213.html
いや、全く違う話ならスマソ。
0231デフォルトの名無しさん
2006/03/05(日) 03:28:240232デフォルトの名無しさん
2006/03/05(日) 03:31:24はなからwxBitmapにすることもできるのでその辺はなんとかなります
0233デフォルトの名無しさん
2006/03/05(日) 03:55:28for(j=x;x+w;j++){ *A
if(*ptr_mask){
for(k=0;k<3;k++){ *B
int v = ptr_image[k] + (ptr_dest[k] - ptr_image[k]) * alpha;
}
}
ptr_dest+=3;
ptr_image+=3;
ptr_mask+=3;
}
ptr_dest += span_dest;
ptr_image += span_image;
ptr_mask += span_image;
}
*A 初期値、終了条件、増分の演算をポインタで行いましょう。
*B ループを展開しましょう
・・・この程度のことはコンパイラがやるんで、これ以上の最適化はSIMD命令に挑戦しましょう。
0234・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/03/05(日) 04:44:29それともVC++やBCB製品版が高いから?
0235デフォルトの名無しさん
2006/03/05(日) 12:42:49くどいようで巣漫画、どこで時間を浪費してるか細かく推測しろ。
せめてループの中か外か。2枚を10枚にするときに他に増えてる処理とか。
「よくわからんが、このやり方じゃ遅いよママン!」では話にならんw
もうひとつ。
wxWidgetsや他のでもいいけど同様の処理をしてるプログラムを
く ま な く 探した?
0236デフォルトの名無しさん
2006/03/05(日) 13:32:59高いからってのもあるし、クロスにしたいってのもある
クロスを維持したままアセンブラ入れるとなるとこれは日と手間ですねw
あとwxWidgetsはほとんどの画像形式をたった2行でRGB配列に変換できるし
メモリ管理を気にしないですむからMFCより画像処理は優秀だよ
もとからRGB配列で管理してるからCreateDIBより高速だしね
>>235
アルファブレンドが高速になったからこんどは拡大縮小や更新範囲がネックになってきた
かなり手をいれないといけないw
一応さがしたというか、wxWidgetsはグラフィック処理の特別なアルゴリズム実装はほとんど持ってない
完成品でグラフィック系のものは見つからなかったね
もともとドキュメント資料がほとんど皆無だしねw
0237デフォルトの名無しさん
2006/03/05(日) 14:29:46いや、wxWidgetに関係なく速く動いてるソースを持ってきて、
あとは特有の処理が必要な部分だけ書きなおせばいいでしょ。
完成品でなくてもその部分だけで十分だし。
wxWidgetが内部で何してるか把握してるんだから
速度の見積もりも含めて簡単だよw
がんがれ。
0238デフォルトの名無しさん
2006/03/05(日) 22:33:57高速化なんて、まずアルゴリズムを考えて、あとは地道にやって行くしか
ないことは、普通のプログラマなら誰でも知ってるだろ。
ただ、もし本気で言っているなら、あなたに高速化は無理だ。
計測→高速化、を繰り返して地道にツブしていくのが本質だから。
αブレンドなんて、処理自体は単純だし、枯れてるわけだから、
ソフトウェアでそれを行うためのアルゴリズムに画期的なものがあるわけじゃない。
例えば、MMXで最高8倍だからムダなんて事はない。
もちろん問題によっては(細かい領域を毎回関数を呼び出して転送し、その中だけ
MMXで記述しているような場合)EMMSによるオーバーヘッドが多すぎて
役に立たないだろうけれど、1024x768の領域の転送なら十分役に立つよ。
試しに、PIII-1G でMMXのコードを書いてみた。パイプラインは特に考慮しないで、
1024x768(32bit BMP) 1枚のブレンドに最悪(転送のない部分がない状態)で
10ms くらいだよ。通常は透明な部分があるので、5ms-7msくらいだろう。
ま、地道にがんがれ。
0239デフォルトの名無しさん
2006/03/05(日) 23:06:59他に何かないですか?
ttp://www.cs.huji.ac.il/~yweiss/Colorization/
ttp://www.cse.ucsc.edu/~milanfar/SR/sr-examples.htm
0240デフォルトの名無しさん
2006/03/06(月) 00:09:000241・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/03/06(月) 00:12:29x87のオペレーション使う前にMMステートが確実にクリアされてればいい。
MS C/C++コンパイラならコンパイル時に警告してくれるしね。
0242デフォルトの名無しさん
2006/03/06(月) 02:11:450243デフォルトの名無しさん
2006/03/06(月) 02:15:100244デフォルトの名無しさん
2006/03/06(月) 03:20:25俺はこれも感動した。
ttp://autotrace.sourceforge.net/
ttp://potrace.sourceforge.net/
ただ、potraceのサンプルのepsファイルをDLしても
上手く開けなかったが…
このスレで見たわけじゃないけど、俺は↓も結構好き。
ttp://scale2x.sourceforge.net/
ttp://www.hiend3d.com/hq2x.html
どちらも、色数少なめの低解像度画像をリアルタイムで
綺麗に拡大するアルゴリズム。
何か面白い使い道ないか考え中。
ちなみに、写真に適用してみたら全然駄目だった。
0245デフォルトの名無しさん
2006/03/06(月) 07:45:41これはなかなかオって思ったけど、2倍とか切りの良い数字意外に適用できるのか?
サンプル画像には1.1倍や微妙に回転などが残念ながら見当たらなかった。
あと、フォトショが速いって言ってる上の奴だけど、前提が
間違ってるんじゃない? フォトショは全画面更新するケース
ではかなり遅いよ。場合によっちゃ目に見えるくらい。
編集中はストレスにならないように更新したペンの周囲だけ
計算してるだろうから、レイヤーが重なりまくっててもそう
負担にならないだけだろ。ペンのサイズを極端に大きくすれば
更新しているティアリング(横に切れる奴)が見える場合もある。
それとレイヤーが12345(5が上)の場合、3を更新したとき12は
あらかじめ計算できるけど45もあらかじめやっとけって言うのは
知識の無い奴の言ってることなのか? 45が計算し直しなのは
そちらが正しい。
あらかじめ45を計算できる手法があったら俺も知りたいもんだ。
4が不透明な場合以外は計算し直しになるだろ。
0246デフォルトの名無しさん
2006/03/06(月) 09:15:28Scale2xもhq2xも整数倍の拡大のみ。
ちなみにScale2xの方は色数を増やさず、元の色のまま変換する。
Scale2xはソースを見るまでもなく、Algorithmってページを見れば
30秒で理解できるような簡単な処理。
0247デフォルトの名無しさん
2006/03/06(月) 10:14:52> あらかじめ45を計算できる手法があったら俺も知りたいもんだ。
なんかできそうだぞ。
α*上の画像 + (1 - α)*下の画像
の dest を 1つずつ下のレイヤにしていけばいいわけだろ?
で、構文木を再帰で生成させて出力したのを観察して、手でまとめたのが下。
x0*a0
+ x1*a1*(1 - a0)
+ x2*a2*(1 - a0 - a1*(1 - a0))
+ x3*a3*(1 - a0 - a1*(1 - a0) - a2*(1 - a0 - a1*(1 - a0)))
+ x4* (1 - a0 - a1*(1 - a0) - a2*(1 - a0 - a1*(1 - a0)) - a3*(1 - a0 - a1*(1 - a0) - a2*(1 - a0 - a1*(1 - a0))))
x4 は、12 を合成したもの。
で、3 を編集中に変更があるのは、a3 と x3。
αがピクセル単位じゃなければ割といいんじゃない?
合成が加算になるのもポイント高いかもよ?
って、実は試してないんだw
構文木出力にバグがあったり、手でまとめるときにミスしてたらゴメンw
「知識の無い奴」なんて言ったんだから、責任もって検算か反証してくれるよねw
0248デフォルトの名無しさん
2006/03/06(月) 10:36:331+2と1+2+3と1+2+3+4と、とか、全部用意しとかないと意味無いと思うんだけど、
そういうもん?
0249デフォルトの名無しさん
2006/03/06(月) 12:06:520250デフォルトの名無しさん
2006/03/06(月) 12:12:490251デフォルトの名無しさん
2006/03/06(月) 14:29:22計算コストが変わらない気がするんだがw
0252デフォルトの名無しさん
2006/03/06(月) 14:36:50■ このスレッドは過去ログ倉庫に格納されています