Re: レンズフィルターでセピア調にしたい ( No.1 ) |
- 名前:管理人 日時:2021/09/10 01:34
レンズフィルターといってもモードが幾つもあるみたいですね…
実現可能なのかどうか判断したいと思いますので
『理想の画像( PhotoShopを使用して加工した画像 )』と
『現状の画像( DXライブラリの機能を使用して現状実現できている画像 )』を
どこかにアップして拝見させていただけないでしょうか? m(_ _)m
( メールで BQE00322(あっとまーく)nifty.com に送っていただいても大丈夫です ( (あっとまーく)は@に置き換えてください ) )
|
Re: レンズフィルターでセピア調にしたい ( No.2 ) |
- 名前:たろう 日時:2021/09/10 02:38
ご返信ありがとうございます
下記にファイルを置きました。
ttps://file-post.net/en/s0/d1/1631206150_46006875_120/?id=AOLbSJd4E1pS(ぱす:sdfagsga)
before画像をフォトショップのレンズフィルター(セピアR172,G122,B51 適応量100% 輝度を保持)を適用したものが
afterの画像『理想の画像( PhotoShopを使用して加工した画像 )』です。
また『現状の画像( DXライブラリの機能を使用して現状実現できている画像 )』ですが、
全く似ても似つかない物しかできておらず参考にならないと思いますので、例えば
下のプログラムでbeforeを読み込んでいただき、A、Q、S、W、D、Eキーで調節していただくと
いくらやっても近い物にはならない状態が分かりやすいと思います。
他に近い方法も思いついておらず、すみませんが現状はこんな感じです<(_ _)>
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode(1);
SetGraphMode(1440,810,16);
DxLib_Init();
SetUsePremulAlphaConvertLoad(1);
SetFontCacheUsePremulAlphaFlag(1);
int grp=LoadGraph("before.png");
int scr=MakeScreen(1440,810);
int Cb=-40,Cr=7,Alp=150,i=0;
while( ProcessMessage() == 0 )
{
ClearDrawScreen() ;
if(CheckHitKey(KEY_INPUT_A)&&i<0){Cb--;i=3;}
if(CheckHitKey(KEY_INPUT_Q)&&i<0){Cb++;i=3;}
if(CheckHitKey(KEY_INPUT_S)&&i<0){Cr--;i=3;}
if(CheckHitKey(KEY_INPUT_W)&&i<0){Cr++;i=3;}
if(CheckHitKey(KEY_INPUT_D)&&i<0){Alp--;i=3;}
if(CheckHitKey(KEY_INPUT_E)&&i<0){Alp++;i=3;}i--;
if(CheckHitKey(KEY_INPUT_ESCAPE)){break;}
GraphFilterBlt( grp , scr, DX_GRAPH_FILTER_MONO,Cb,Cr);
DrawGraph(0,0,grp,TRUE);
SetDrawBlendMode(DX_BLENDMODE_PMA_ALPHA,Alp);
DrawGraph(0,0,scr,TRUE);
SetDrawBlendMode(DX_BLENDMODE_PMA_ALPHA,255);
DrawFormatString( 0,30,GetColor(255,255,255),u8"Cb(%d) Cr(%d) Alp(%d)",Cb,Cr,Alp);
ScreenFlip();
}
DxLib_End();
return 0;
}
 |
Re: レンズフィルターでセピア調にしたい ( No.3 ) |
- 名前:管理人 日時:2021/09/11 06:01
ファイルのアップありがとうございます
拝見してみましたが、個人的にはかなり after.png に近い雰囲気になっているように感じます
これ以上近づけようとする場合はやはり PhotoShop のレンズフィルターでどのような
計算式で色が変換されているのか分からないと難しいので、現状ではこれ以上近づけるのは
難しいのではないかと思います
セピア調にする他の方法として DX_GRAPH_FILTER_HSB の色相・彩度・輝度フィルターを
使用する方法もありますので、もしまだ試していませんでしたらお試しください m(_ _)m
( DX_GRAPH_FILTER_HSB でもレンズフィルターと同じ見た目にすることはできませんが… )
// 例
GraphFilterBlt( grp , scr, DX_GRAPH_FILTER_HSB, 1, 0, -128, -64 );
|
Re: レンズフィルターでセピア調にしたい ( No.4 ) |
- 名前:たろう 日時:2021/09/11 12:49
お忙しい中ご返信ありがとうございます。
すみません、フォトショップのレンズフィルターの計算式は全く分かりませんので
この方法でセピア調にするというのはあきらめようと思います。
お手数をおかけいたしました<(_ _)>
それでHSBやMONOを使う上の方法を応用しようと思いますが、その微調整のために、たとえば
特定の色の濃さだけを上げたり下げたりする(REDを+10でGREENを-20など)ような方法はありますでしょうか?
複数のフィルターやブレンドを経由するなど色々考えたのですが
いい方法が思い浮かびません
アドバイスを頂けると助かります。
宜しくお願いいたします<(_ _)>
|
Re: レンズフィルターでセピア調にしたい ( No.5 ) |
- 名前:管理人 日時:2021/09/13 01:42
MakeScreen で R,G,B 用に 3つの仮画面を作成して、それぞれ
SetDrawScree( RScreen );
SetDrawBright( 255, 0, 0 );
DrawGraph( 0, 0, BaseImage, FALSE );
SetDrawScree( GScreen );
SetDrawBright( 0, 255, 0 );
DrawGraph( 0, 0, BaseImage, FALSE );
SetDrawScree( BScreen );
SetDrawBright( 0, 0, 255 );
DrawGraph( 0, 0, BaseImage, FALSE );
↑こちらのように SetDrawBright を使用して
元画像からR成分だけを抜き出した画像
元画像からG成分だけを抜き出した画像
元画像からB成分だけを抜き出した画像
を作成して、それぞれにフィルターで明るくしたり暗くしたりしたあと、
SetDrawBlendMode( DX_BLENDMODE_ADD, 255 );
DrawGraph( 0, 0, RScreen, FALSE );
DrawGraph( 0, 0, GScreen, FALSE );
DrawGraph( 0, 0, BScreen, FALSE );
↑こちらのように加算ブレンド設定で R,G,Bの画像を描画すれば
R,G,Bの成分が合成された描画結果が得られますので
よろしければお試しください m(_ _)m
|
Re: レンズフィルターでセピア調にしたい ( No.6 ) |
- 名前:たろう(解決) 日時:2021/09/14 16:03
ありがとうございます、まさにこれです。
先ほど試して、望み通りの効果が得られることを確認しました。
SetDrawBrightは知りませんでした…本当に何でもありますね
お手数をおかけいたしました<(_ _)>
|
|