BMPを選択した範囲内で保存する機能の追加 – プログラミング – Home

BMPを選択した範囲内で保存する機能の...
 
通知
すべてクリア

[解決済] BMPを選択した範囲内で保存する機能の追加

固定ページ 1 / 3

KM
 KM
(@KM)
ゲスト
結合: 22年前
投稿: 19
Topic starter  

はじめまして。KMと申します。
実は現在2つのBMPを使ってピクセルの減算処理をしていまして、その処理した画像
をBMPで保存する機能をつけたいのですがどのようにして保存すればよいかわかりま
せん。保存の仕方としましては、メニューのところに従来ある「名前をつけて保存」と
は別に「画像を保存」という項目を設け、そこをクリックすると画面全体ではなく処理
後の画像の部分だけを保存するという形にしたいのですが、画像を保存する関数?など
があるのでしょうか?
お願いします。

開発環境はwindows XPで、Visual C++6.0です。


引用未解決
トピックタグ
KM
 KM
(@KM)
ゲスト
結合: 22年前
投稿: 19
Topic starter  

すみません。
開発環境の追加でMFCでプログラミングしています。


返信引用
n
 n
(@n)
ゲスト
結合: 23年前
投稿: 159
 

その2つのBMPはプログラム中でどのように保持しているのですか?


返信引用
KM
 KM
(@KM)
ゲスト
結合: 22年前
投稿: 19
Topic starter  

nさん返信ありがとうございます。

メニューからA画像指定、B画像指定として各画像をメニューのファイルを開くから読
み込めるようになっています。格納の仕方は、各ピクセル値を読み込んでA画像とB画
像それぞれの格納先を作っておき、実行時に指定されたらそこへ格納されるようになっ
ています。そして表示ボタンを押すとA画像とB画像を並べて2枚表示し、その下にC画
像として処理後の画像が表示されるようになっています。そのC画像だけを保存したい
のです。

よろしくお願いします。


返信引用
n
 n
(@n)
ゲスト
結合: 23年前
投稿: 159
 

それぞれの格納方法は具体的にわかりませんか?


返信引用
KM
 KM
(@KM)
ゲスト
結合: 22年前
投稿: 19
Topic starter  

// CHosei01Doc シリアライゼーション

void CHosei01Doc::Serialize(CArchive& ar)
{
DWORD dwDummy;
   WORD wDummy;
int i,j,k;
int nTuika,nHasuu;

if (ar.IsStoring())
{
// TODO: この位置に保存用のコードを追加してください。
}
else
{
// TODO: この位置に読み込み用のコードを追加してください。

nHasuu=lWidth*3 % 4; //4バイトの倍数に対する端数を計算する
if(nHasuu!=0) nTuika=4-nHasuu; //端数があれば、追加すべきバイ
トを求める
else nTuika=0;

for(i=0;i<13;i++)
ar>>dwDummy;
ar>>wDummy;

k=bImageType;
for(j=239;j>=0;j--) //上下を逆にする
for(i=0;i<320;i++)
    ar>>bBlue[k][i][j]>>bGreen[k][i][j]>>bRed[k][i][j];

        

}
}

//////////////////////////////////////////////////////////////////////////////

// CHosei01Doc コマンド

void CHosei01Doc::OnMenuImageA()
{
// TODO: この位置にコマンド ハンドラ用のコードを追加してください
bImageType=0;
}

void CHosei01Doc::OnMenuImageB()
{
// TODO: この位置にコマンド ハンドラ用のコードを追加してください
bImageType=1;
}

ソースをのせてみましたが、お分かりいただけるでしょうか?
bimageTypeに0か1が入ることでAかBかを切り替えています。
そして格納は主に上側のDoc.cppで行っています。


返信引用
n
 n
(@n)
ゲスト
結合: 23年前
投稿: 159
 

C画像はどのように保持されていますか?


返信引用
KM
 KM
(@KM)
ゲスト
結合: 22年前
投稿: 19
Topic starter  

A画像とB画像の減算した結果を表示しているだけなので、どこかへ格納ということは
していません。


返信引用
n
 n
(@n)
ゲスト
結合: 23年前
投稿: 159
 

bBlue,bGreen,bRedはそれぞれどのように宣言されていますか?


返信引用
KM
 KM
(@KM)
ゲスト
結合: 22年前
投稿: 19
Topic starter  

void CHosei01View::OnMenuHyouji(CCmdUI* pCmdUI)
{
unsigned char r0,r1,r2,g0,g1,g2,b0,b1,b2;

        for(j=0;j<240;j++)
for(i=0;i<320;i++){
r0=pDoc->bRed[0][i][j];
g0=pDoc->bGreen[0][i][j];
b0=pDoc->bBlue[0][i][j];
pDC->SetPixel(x0+i,y0+j,RGB(r0,g0,b0)); //A
画像の表示

r1=pDoc->bRed[1][i][j];
g1=pDoc->bGreen[1][i][j];
b1=pDoc->bBlue[1][i][j];
pDC->SetPixel(x1+i,y0+j,RGB(r1,g1,b1)); //B
画像の表示

r2=fabs(r1-r0);
g2=fabs(g1-g0);
b2=fabs(b1-b0);

                  pDC->SetPixel(x1+i,y0+j,RGB(r2,g2,b2)); //C
画像の表示
}

といった感じです。


返信引用
n
 n
(@n)
ゲスト
結合: 23年前
投稿: 159
 

いや、どう使われているかではなくどう宣言されているかなんだけど。

「unsigned char bBlue[2][320][240];」かな?


返信引用
KM
 KM
(@KM)
ゲスト
結合: 22年前
投稿: 19
Topic starter  

すみません。

unsigned char bRed[2][512][512];
unsigned char bGreen[2][512][512];
unsigned char bBlue[2][512][512];

です。


返信引用
n
 n
(@n)
ゲスト
結合: 23年前
投稿: 159
 

ではまず、
bBlue,bGreen,bRedを宣言しているのと同じ場所に、

BYTE header[13*sizeof(DWORD)+sizeof(WORD)];

と宣言して下さい。
次にCHosei01Doc::Serialize()の

for(i=0;i<13;i++)
ar>>dwDummy;
ar>>wDummy;

を、

for(i=0;i<sizeof(header)/sizeof(BYTE);i++)
ar>>header[i];

と変えて下さい。
で次にSerialize()のif(ar.IsStoring()){}の{}の間に、

for(i=0;i<sizeof(header)/sizeof(BYTE);i++)
ar<<header[i];

for(j=0;j<240;j++){
for(i=0;i<320;i++){
ar<<fabs(pDoc->bBlue[1][i][j]-pDoc->bBlue[0][i][j]);
ar<<fabs(pDoc->bGreen[1][i][j]-pDoc->bGreen[0][i][j]);
ar<<fabs(pDoc->bRed[1][i][j]-pDoc->bRed[0][i][j]);
}
}

を入れて下さい。
とりあえずこれで全領域がファイルに保存されるか確かめてみて下さい。


返信引用
n
 n
(@n)
ゲスト
結合: 23年前
投稿: 159
 

ちょっと間違い。
最後のfor文のところを修正します。

for(j=0;j<240;j++){
for(i=0;i<320;i++){
unsigned char b=fabs(pDoc->bBlue[1][i][j]-pDoc->bBlue[0][i][j]);
unsigned char g=fabs(pDoc->bGreen[1][i][j]-pDoc->bGreen[0][i][j]);
unsigned char r=fabs(pDoc->bRed[1][i][j]-pDoc->bRed[0][i][j]);
ar<<b<<g<<r;
}
}


返信引用
KM
 KM
(@KM)
ゲスト
結合: 22年前
投稿: 19
Topic starter  

pDocが定義されていないというエラーが出たのですが、定義はどう書けばいいのでしょ
うか?


返信引用
固定ページ 1 / 3

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました