|

楼主 |
发表于 2012-9-22 10:51:00
|
显示全部楼层
Re:用getpixel和setpixel实现混合加,效果达到了,就是慢得
我在网上下载了一个别人的delphi源码实现的alpha混合,和我的程序结构几乎是一样的,为什么他得基本上不占cpu啊!!!!!!!!!
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Image2: TImage;
Image3: TImage;
BitBtn1: TBitBtn;
Image4: TImage;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
var i, j, k: integer;
beta: integer;
r, g, b, r1, g1, b1, r2, g2, b2: integer;
begin
for i := 0 to image1.height - 1 do
begin
for j := 0 to image1.Width - 1 do
begin
//alpha ֵ
r := GetRValue(image2.Canvas.Pixels[i, j]);
//g := GetGValue(image1.Canvas.Pixels[i,j]);
//b := GetBValue(image1.Canvas.Pixels[i,j]);
r1 := GetRValue(image1.Canvas.Pixels[i, j]);
g1 := GetGValue(image1.Canvas.Pixels[i, j]);
b1 := GetBValue(image1.Canvas.Pixels[i, j]);
r2 := GetRValue(image3.Canvas.Pixels[i, j]);
g2 := GetGValue(image3.Canvas.Pixels[i, j]);
b2 := GetBValue(image3.Canvas.Pixels[i, j]);
r2 := (r1 * r + r2 * (255 - r)) div 255;
g2 := (g1 * r + g2 * (255 - r)) div 255;
b2 := (b1 * r + b2 * (255 - r)) div 255;
image4.Canvas.Pixels[i, j] := RGB(r2, g2, b2);
end;
end;
end;
end.
|
|