dポイントプレゼントキャンペーン実施中!

c言語を用いて画像の透明度をあげる方法を教えてください。

下プログラムの画像処理ができません。

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include "mybmpi.h"

/*メイン関数*/
int main(void)
{
int width, height;
int x, y;
BYTE *buffer_f; /*入力画像(前景)用メモリのポインタ*/
BYTE *buffer_b; /*入力画像(背景)用メモリのポインタ*/
BYTE *Rbuffer_f, *Gbuffer_f, *Bbuffer_f; /*入力(前景)用*/
BYTE *Rbuffer_b, *Gbuffer_b, *Bbuffer_b; /*入力(背景)用*/
BYTE *Rbuffer2, *Gbuffer2, *Bbuffer2; /*出力用*/
double tmp_pix;
double ratio=0.5; /*どの割合で混ぜるか ratio : 1-ratio */

/*前景画像ファイルを開く*/
buffer_f = LoadBitmap("front.bmp", &width, &height);
if(buffer_f==NULL)
{
/*ファイルが開けなかったので終了*/
return 0;
}
/*背景画像ファイルを開く*/
buffer_b = LoadBitmap("back.bmp", &width, &height);
if(buffer_b==NULL)
{
/*ファイルが開けなかったので終了*/
return 0;
}

/*RGBを色平面に分解*/
Rbuffer_f = (BYTE*)malloc( width*height ); /*メモリ確保*/
Gbuffer_f = (BYTE*)malloc( width*height );
Bbuffer_f = (BYTE*)malloc( width*height );
RGB2Plane(buffer_f, Rbuffer_f, Gbuffer_f, Bbuffer_f, width, height);

Rbuffer_b = (BYTE*)malloc( width*height ); /*メモリ確保*/
Gbuffer_b = (BYTE*)malloc( width*height );
Bbuffer_b = (BYTE*)malloc( width*height );
RGB2Plane(buffer_b, Rbuffer_b, Gbuffer_b, Bbuffer_b, width, height);

/*出力用*/
Rbuffer2 = (BYTE*)malloc( width*height ); /*メモリ確保*/
Gbuffer2 = (BYTE*)malloc( width*height );
Bbuffer2 = (BYTE*)malloc( width*height );

/*****************画像処理をここで行う********************/
for(y=0; y<height; y++){
for(x=0; x<width; x++){

/*この部分がわかりません*/
/*前景画像と背景画像を ratio : 1-ratio で合成する方法?*/

/*R,G,Bそれぞれについて同じ処理をする*/

}
}
/*******************ここまで******************************/

/*書き込み処理*/
Plane2RGB(buffer_f, Rbuffer2, Gbuffer2, Bbuffer2, width, height); /*bufferは入力のものを転用する*/
SaveBitmap("result.bmp", buffer_f, width, height);

/*メモリを解放する*/
free( buffer_f );
free( buffer_b );
free( Rbuffe

A 回答 (1件)

Rbuffer2[y*width + x] = ratio*Rbuffer_f[y*width + x] + (1-ratio)*Rbuffer_b[y*width + x];


Gbuffer2[y*width + x] = ratio*Gbuffer_f[y*width + x] + (1-ratio)*Gbuffer_b[y*width + x];
Bbuffer2[y*width + x] = ratio*Bbuffer_f[y*width + x] + (1-ratio)*Bbuffer_b[y*width + x];

こんな感じで良いかと。
    • good
    • 1
この回答へのお礼

ありがとうございます。

解決しました。

お礼日時:2010/08/09 00:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!