首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

两个图片混合,但是会出现程序崩溃,请帮忙修改·多谢啦

2012-02-15 
两个图片混合,但是会出现程序崩溃,请帮忙修改谢谢啦一旦image1中的图片比image2总图片大,程序就崩溃了,请

两个图片混合,但是会出现程序崩溃,请帮忙修改·谢谢啦
一旦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;

热点排行