私は非常に単純なグラフィックライブラリを作成しており、アルファブレンディングを行う方法を理解しようとしています。何度か試しましたが、満足のいく結果にはなりませんでした。ウィキペディアによると、私はすべきです:
値=(1-アルファ)値0+アルファ値1
ただし、これはまったく機能していません。多分私は何か間違ったことをしているのですか?
私が含めたコードは、カラフルな絵を描き(これが「近接」関数です)、次に(100,100)に部分的に透明なボックスを描画しようとします。ただし、白い半透明のボックスの代わりに、画像に奇妙な歪みが生じます(投稿の下部に配置するようにします)。助言がありますか?これが私のコードです:
#include "hgl.h"
void proximity()
{
int x = 0, y = 0, d1, d2, d3, dcenter;
while(x < WIDTH){
while(y < HEIGHT){
d1 = distance(x, y, (WIDTH/2) - 200, (HEIGHT/2) + 200);
d2 = distance(x, y, (WIDTH/2) + 200, (HEIGHT/2) + 200);
d3 = distance(x, y, (WIDTH/2), (HEIGHT/2) - 150);
dcenter = distance(x, y, WIDTH/2, HEIGHT/2);
putpixel(x, y, d1, d2, d3);
y++;
}
y = 0;
x++;
}
}
int alpha_transparency(float alpha, float value1, float value2)
{
return (1-alpha) * value1 + alpha * value2;
}
void transparent_box(int pos_x, int pos_y, int width, int height, float alpha, char r, char g, char b)
{
int x = 0, y = 0;
while(x < width)
{
while(y < height)
{
int rr, rg, rb;
rr = alpha_transparency(alpha, p.bitmap[x+pos_x][y+pos_y].r, r);
rg = alpha_transparency(alpha, p.bitmap[x+pos_x][y+pos_y].g, g);
rb = alpha_transparency(alpha, p.bitmap[x+pos_x][y+pos_y].b, b);
putpixel(pos_x + x, pos_y + y, rr, rg, rb);
y++;
}
x++;
y = 0;
}
}
int main()
{
fp = fopen("out.bmp","wb");
set_dimensions(1440, 900);
insert_header();
white_screen();
proximity();
transparent_box(100, 100, 500, 500, .9, 255, 255, 255);
insert_image();
fclose(fp);
return 0;
}
申し訳ありませんが、私は新しいユーザーであるため、出力を含めることができませんでした。ただし、ここにリンクがあります。