無題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
428

無題

#1

投稿記事 by 428 » 15年前

あけましておめでとうごさいます。
以前質問したんですが名前は忘れてしまったので新たにしました。

[1]ソースファイルのscoreとういうすべての変数をsave.scoreになおしたいのですが
この操作を簡単にできるエディタを教えてください。これができると例えば漢字の間違いなどが
起こったとき非常に便利なので知りたくなりました。

[2]DXライブラリである部分をぼかしたいです。どのようにすればいいのですか?もし、よろしければ関数が
あれば示してくださるとうれしいです。

[3]透過処理についてです。私はttp://homepage2.nifty.com/pyonpyonpyopyon/でロゴを作成していますが
透過処理すると文字の周りが白抜きにされて非常にいやです。今まで(今でも)拡大して文字の淵を塗って直しています。白抜きにならない簡単な方法はありますか? 知ってたら教えてください。

以上の3点です。どれでもよいのでお願いします。

バグ

Re:無題

#2

投稿記事 by バグ » 15年前

とりあえず1の質問についてですが、VisualStudioで可能です。
あとは置換機能のあるテキストエディタなら可能ですね。
私はEmEditorの有料版を使用していますが、フリー版でも充分便利なのでオススメです。

428

Re:無題

#3

投稿記事 by 428 » 15年前

すいません。本当にわからないで、どうやってやるか
記述してほしいです・・・。

kazuoni

Re:無題

#4

投稿記事 by kazuoni » 15年前

> [1]
メモ帳でもありますが、「編集」「置換」で変更前の文字列と変更後の文字列を指定できます。

> [2]
どうぼかしたいのかがわかりませんが、
画像をメモリに読み込んで特定部分に線形フィルタをかけることでぼかすことができるかと思います。
確か関数はなかったかと。

> [3]
それは仕方がないように思います。。

428

Re:無題

#5

投稿記事 by 428 » 15年前

回答ありがとうございます。
2Dのある画像をぼかしたいのです。ぼかすのは
初めてなんでなんでも試してみますので、サルでもわかるように詳しくお願いします。

428

Re:無題

#6

投稿記事 by 428 » 15年前

すいません。間違いました。
ある画像をぼかしたいのではなく
ある区間にある画像をぼかしたいです。
なんでも試してみますので知ってたらお願いします。
あまり、難しいのは無理ですが・・・。

SooA

Re:無題

#7

投稿記事 by SooA » 15年前

>3
ご使用のツールがアルファチャンネルに対応していないのでしょうか?
背景が全て白塗りになっいて白を透化で抜くと崩れるって事かな?

どこまでできるツールなのか分からないのですが
予め黒色で縁取ったロゴを作成するなどして、
あとで修正しやすいような状態にしておくとか、
同じ形の真っ黒なロゴを作ってペイントソフトで
マスク合成してみるとかで多少は作業が
楽になるのではないかと思います。

428

Re:無題

#8

投稿記事 by 428 » 15年前

>背景が全て白塗りになっいて白を透化で抜くと崩れるって事かな?
いや違います。ロゴを作ると周りを灰色や黒で少しずつ淵をとっていて、結果的にその画像を白で
透過処理してもその灰色や黒が残り、目立ってるんですよ。だからいちいちその画像の灰色の淵を
拡大して白で処理してるんです。

ロゴ作るとを縁取りを毎回やってるんですけど、
きれいなロゴで、縁取りしなくていい方法があれば教えてほしいですね。
みんなどうやって作ってるんですかね?

DVDM

Re:無題

#9

投稿記事 by DVDM » 15年前

>>428さん
私はPhotoShopで作ることになるので縁が汚くなる現象は(基本的に)ないですね。
極端に拡大縮小すると、さすがに目立ちますけど・・・。

その問題となっている画像を添付することは可能でしょうか?

SooA

Re:無題

#10

投稿記事 by SooA » 15年前

>いや違います。
こういう事ではないんですか?

428

Re:無題

#11

投稿記事 by 428 » 15年前

PhotoShopはもってないです。
画像はこれでいいですかね?
gifなのですが、拡大すると微妙に灰色などで縁取りされています。私はこれが要らないんですよ。

一番知りたいのは2のぼかし処理なのですがここを見て知ってる人がいたら是非お願いします。

428

Re:無題

#12

投稿記事 by 428 » 15年前

> SooAさん
そうです、そんな感じです。
その微妙な白がいらないんです。みんなこうなるんですかね?

DVDM

Re:無題

#13

投稿記事 by DVDM » 15年前

>>428さん
そのロゴツールを使って周りの白いのが出るんですよね?
そのツールは使ったことがないので何とも言えないのですが、他のツールでは駄目なのでしょうか?
例えば、GIMPやPIXIAなどフリーのソフトは他にもありますし。


ぼかし処理はプログラム側でやるのか、画像編集という形でやるのかで
説明するところが変わってきます。
画像編集でいいのであればGIMPなど、ぼかし機能が付いたツールを使えば宜しいかと思います。

SooA

Re:無題

#14

投稿記事 by SooA » 15年前

3のツールですが画像保存(台紙を透過)でpng出力できますね。

kazuoni

Re:無題

#15

投稿記事 by kazuoni » 15年前

[2]をとりあえず作ってみました。

http://www1.axfc.net/uploader/Sc/so/69565
Key : kazuoni

back.jpgを用意し(640*480推奨).exeと同じ場所に入れてください。

が、関数公開の前に、質問をさせてください。。
現在、線形フィルタのかけ方は、
1、画像をLoadSoftImageで読み込む
2、線形フィルタを指定範囲に適応
3、SoftImageからグラフィックハンドルを取得
のようにしています。
キー入力があったらグラフィックハンドルを消して、
線形フィルタ適応範囲を移動させて、再度1からはじめていますが、
まずこれではFPSを出すことはできません。

これを修正するにはどうしたらよいでしょうか?
まず線形フィルタを適応するにはイメージハンドルが必須だとは思いますが、
グラフィックハンドルからイメージハンドルを生成できればもう少し高速化できるのかな
と思うのですが・・・やり方がわかりません。

#追記
3の後は、イメージハンドルを消去し、グラフィックハンドルを保持・描写に使っています。
何か変化が出たら再度やり直しってことでした。
これよりは、SetDrawScreenで描写先に指定したものから指定範囲のピクセルを
取得・変更したほうが早いかもしれない・・・。
が、広範囲にはかなり厳しい気がします・・・。

ご教授よろしくお願いします。。

質問者以外がここで質問することが不適切でしたら、新スレを立てようと思います。 画像

kazuoni

Re:無題

#16

投稿記事 by kazuoni » 15年前

質問者さんの質問を読み直したら、「描写した一部」っとありますね。
やはり、SetDrawScreenで描写先を変え、その描写先からピクセルを取るってわけですか・・・。
かなり厳しい気がします。。
うまいこと、描写したものをイメージハンドルに変えることができればいいのですが。

ここも含めてご教授お願いします。

#追記
ある区間にある画像=描写した一部と勝手に認識してます^^;
追記続きで申し訳ありません。。 画像

SooA

Re:無題

#17

投稿記事 by SooA » 15年前

サンプル画像
http://www42.tok2.com/home/tuk2nd/bbs/img/28.png
※サンプル画像は龍神禄のフェイス画像を使わせて頂きました。

>ぼかし
それっぽく見えるだけで良いのでしたら
アルファブレンドで左右にぶれさせて描画すれば
雰囲気は出ると思います。

添付画像はキャラ全体でぶれさせていますが、
マスク処理とあわせれば部分的に行うこともできます。
※サンプル画像は左右と上方向にぶれさせています。
int hHaikei,hCharface;
    hHaikei = LoadGraph( "背景.jpg" ) ;
    hCharface = LoadGraph( "face.png" ) ;


    /* ////////////////////////////////////////////////////////////////
        メインループ
    */ ////////////////////////////////////////////////////////////////

    while( ProcessMessage() == 0 )
    {

        SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 255 ) ;

        //背景
        DrawGraph( 0, 0, hHaikei, FALSE ) ;
        //左キャラ通常
        DrawGraph( -50, 80, hCharface, TRUE ) ;

        //右キャラ通常
        DrawGraph( 250, 80, hCharface, TRUE ) ;

        SetDrawBlendMode( DX_BLENDMODE_ALPHA , 100 ) ;

        //右キャラ ブレンド
        DrawGraph( 250, 80-3, hCharface, TRUE ) ;
        DrawGraph( 250-3, 80, hCharface, TRUE ) ;
        DrawGraph( 250+3, 80, hCharface, TRUE ) ;


        // スクリーンに反映
        ScreenFlip() ;

    } /* // while 閉じ // */

Justy

Re:無題

#18

投稿記事 by Justy » 15年前

□ 428さん
> [2]DXライブラリである部分をぼかしたいです
> ある区間にある画像をぼかしたいです

 区間、ということはレンダリング済みの画像の一部分をぼかしたい、ということでしょうか。

1 空のテクスチャに対しレンダリングを行う。
2 ぼかしたい部分の区間座標(影響範囲)を計算し、その部分だけをくりぬいたテクスチャを作る
3 1を普通に表示した後、半透明で薄くした2のテクスチャを少しずつ表示位置をずらしながら何度も描く

という方法はどうでしょうか?

# おっと、かぶってしまった


□ kazuoniさん
 空間フィルタ的なそういう処理を高速でやりたいなら DirectXとかで GPUを使ってやるのが
いいかと思うのですが、1点だけ。

「3 SoftImageからグラフィックハンドルを取得」はどの関数を使っていますか?
画像

kazuoni

Re:無題

#19

投稿記事 by kazuoni » 15年前

> Justyさん

> 空間フィルタ的なそういう処理を高速でやりたいなら DirectXとかで GPUを使ってやる
やはりそうですよね。。
どうしてもDirectXを敬遠してしまいがちで。。
(うーん。年も変わったことだし、DirectXのプログラミングに移ろうかなぁ。)

とりあえず、フィルタのアルゴリズムを見直したら、多少は早くなりましたが、
それでもFPS30ぐらい・・・ですね。。

> 「3 SoftImageからグラフィックハンドルを取得」
CreateGraphFromSoftImage関数で行っています。

Justy

Re:無題

#20

投稿記事 by Justy » 15年前


> CreateGraphFromSoftImage関数で行っています

 2回目は ReCreateGraphFromSoftImageを使ってみるというのはどうでしょう?
 ハンドルの生成・破棄回数が減るので、少しは早くなるかもしれません。

kazuoni

Re:無題

#21

投稿記事 by kazuoni » 15年前

うーん。あまりがっつり改善はされませんでした。
自分の場合、出力画面ではなく、LoadSotImageで読み込んできたファイルのみ
有効なんで、そもそも質問者さんには必要のないものですね。。orz

45331にも書いたのですが、
MakeScreenで作成した描写先にいろいろと描写した後、
それをSoftImage系に変換することは可能なのでしょうか?
できないとしたら、やはり、そのままPixel操作するしかないのでしょうか?
確か、GetPixel系はものすごく処理が遅かったような記憶が・・・。

Justy

Re:無題

#22

投稿記事 by Justy » 15年前

 なるほど、大差なかったですか。

 ピクセル操作の方は一応 GraphLock / GraphUnLockでカラー値の読み出し・変更ができたはずです。
 ただ、レンダリングしたテクスチャでも使えるかどうかは試してみないとわかりません。

428

Re:無題

#23

投稿記事 by 428 » 15年前

なかなか高度な話で私が入りこめるかどうかわかりませんが

ある区間に入った画像をぼかしたいということです。もちろんその画像は変化します。
霧の中に人が入ったり出たりして、その人がぼやけるイメージです。

428

Re:無題

#24

投稿記事 by 428 » 15年前

いい忘れましたがみなんさんありがとうございます。
ある場所に張るフィルターみたいなのがあって、それを張ればその場所に入った画像をぼかしてくれる
と思いましたが、そんな単純ではないですね。

kazuoni

Re:無題

#25

投稿記事 by kazuoni » 15年前

ちょっと考えましたが、
やはり、フィルタはDXライブラリのごり押しでは厳しかったかもしれないですorz

それっぽく見せるのはSooAさん、Justyさんがおっしゃっている
方法を強くお勧めします。
っというか、ゲームのぼかしならばそれぐらいで十分かと^^;
(フィルタはノイズ処理とか、エッジ抽出が主な目的ですしね。。)

混乱させてすみません。
自分でこれと決めたらそれをやろうとして、柔軟に考えれてませんでした。。

とりあえず、自分の作ったやつUPしておきます。
AveragingFilter.h , AveragingFilter.cpp
をプロジェクトに通し、AveragingFilter.hをインクルードしてください。
詳しくはread meを見てください。

使い物にならないですが・・・orz

なにかアドバイスがありましたら、よろしくお願いします・・・。

Justy

Re:無題

#26

投稿記事 by Justy » 15年前


> なにかアドバイスがありましたら

1 画像ファイルを読み出し(普通の)イメージハンドルを作るのと同時に、
 メモリに RGBイメージを保持しておきます。
2 MakeGraphでフィルタの適用範囲サイズ分の空のイメージハンドルを作ります。
3 2と同じサイズ分のメモリバッファを別に用意し、そこにフィルタをかけた BMPイメージを作って、
 ReCreateGraphFromBmp関数で2のイメージハンドルの中身を入れ替えます。
4 1を表示したあと、3を表示します。

 これなら処理はフィルタの適用範囲だけで収まりますので、処理としては大分軽くなるかと
思いますがどうでしょう?

kazuoni

Re:無題

#27

投稿記事 by kazuoni » 15年前

返信が遅れました。。持ち上げすいません。

おっしゃるとおり、猛烈に軽い処理になりましたw
相変わらず頭が固いです・・・。

Justyさんの方法を応用すれば、
フィルタをかける可能性のある画像は、
独自のクラス(RGBイメージ保持)
で画像を取得し、そのスーパークラスで描写を管理すれば、
IsDrawFilter(TRUE);
SetFilter(Fx,Fy,Fwidth,Fheight,Flevel);
DrawFGraph(...);
なんて結構楽にかつ軽い処理で実現できそうです。
ほかにもフィルタの形(円も含めて)をユーザー指定できるようにしたり、
フィルタの種類を増やして機能を追加したりなど、
結構いろいろなことができそうな気がします。

が、いかんせん、時間も需要もなさそうなので、余力があれば作成することにします^^;

> 428さん
私的なことでレスが長くなってしまってすみませんでした。

閉鎖

“C言語何でも質問掲示板” へ戻る