两个图片混合,但是会出现程序崩溃,请帮忙修改·谢谢啦
一旦image1中的图片比image2总图片大,程序就崩溃了,请问是什么原因呢?能帮我修改一下吗?
procedure TForm1.orprocessClick(Sender: TObject);
var
b1, b2: Tbitmap;
p1, p2: Pbytearray;
i, j: integer;
begin
b1 := Tbitmap.Create;
b2 := Tbitmap.create;
//创建位图实例
b1.assign(Image1.Picture.Bitmap);
b2.assign(Image2.Picture.Bitmap);
b1.PixelFormat := pf24bit;
b2.PixelFormat := pf24bit;
//便于操作
for i := 0 to b1.Height - 1 do
begin
p1 := b1.ScanLine[i];
p2 := b2.ScanLine[i];
//分别获取两幅图像的象素信息
for j := 0 to b1.Width - 1 do
begin
p1[3 * j + 2] := p1[3 * j + 2] or p2[3 * j + 2];
p1[3 * j + 1] := p1[3 * j + 1] or p2[3 * j + 1];
p1[3 * j] := p1[3 * j] or p2[3 * j];
//进行象素的与操作
end;
end;
Image3.Picture.Bitmap.Assign(b1);
b1.Free;
//释放资源
b2.Free;
end;
[解决办法]
限制一下图片大小
procedure TForm1.orprocessClick(Sender: TObject);
var
b1, b2: Tbitmap;
p1, p2: Pbytearray;
i, j,w,h: integer;
begin
b1 := Tbitmap.Create;
b2 := Tbitmap.create;
//创建位图实例
b1.assign(Image1.Picture.Bitmap);
b2.assign(Image2.Picture.Bitmap);
if b1.Width>b2.Width then w:=b2.Width-1 else w:=b1.Width-1;
if b1.Height>b2.Height then h:=b2.Height-1 else h:=b1.Height-1;
b1.PixelFormat := pf24bit;
b2.PixelFormat := pf24bit;
//便于操作
for i := 0 to h do
begin
p1 := b1.ScanLine[i];
p2 := b2.ScanLine[i];
//分别获取两幅图像的象素信息
for j := 0 to w do
begin
p1[3 * j + 2] := p1[3 * j + 2] or p2[3 * j + 2];
p1[3 * j + 1] := p1[3 * j + 1] or p2[3 * j + 1];
p1[3 * j] := p1[3 * j] or p2[3 * j];
//进行象素的与操作
end;
end;
Image3.Picture.Bitmap.Assign(b1);
b1.Free;
//释放资源
b2.Free;
end;