c言語を用いて画像の透明度をあげる方法を教えてください。
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
補足
お教えいただいた演算方法だと背景部分の透過情報が無視されるため、いびつな画像になるようです。 参考: http://blogimg.goo.ne.jp/user_image/72/74/ddd54d03438150fd100f1409f9d23956.png 両方のアルファ値を考慮した計算方法はありますでしょうか イメージしている演算例(参考): http://blogimg.goo.ne.jp/user_image/67/78/27f9e4233e6604fdb0659f51133e53a9.png