Image3.Picture.Bitmap.Canvas.Draw(0,0,Image1.Picture.Bitmap);
Image3.Picture.Bitmap.Canvas.CopyMode:=cmNotSrcCopy;
Image3.Picture.Bitmap.Canvas.CopyRect(Rect(0,0,Image3.Picture.Bitmap.Width,Image3.Picture.Bitmap.Height),Image2.Picture.Bitmap.Canvas,
Rect(0,0,Image3.Picture.Bitmap.Width,Image3.Picture.Bitmap.Height));
Как быстро на Дельфи вычитать картинки?
Задача: вычесть по цвету одну картинку из другой. Исходная картинка:
Из нее нужно вычесть такую картинку:
for j := Image1.Picture.Bitmap.Canvas.ClipRect.Top to Image1.Picture.Bitmap.Canvas.ClipRect.Bottom-1 do
begin
for i := Image1.Picture.Bitmap.Canvas.ClipRect.Left to Image1.Picture.Bitmap.Canvas.ClipRect.Right-1 do
begin
Image3.Picture.Bitmap.Canvas.Pixels[i,j]:=
Image2.Picture.Bitmap.Canvas.Pixels[i,j]-
Image1.Picture.Bitmap.Canvas.Pixels[i,j];
end;
end;
Но очень тормозит. Нужно, чтобы работало быстрее. Есть вариант сделать через ScanLine, но нужно уметь работать с палитрой.
Цитата:
Originally posted by Martin114
...и получить светлую полосу. Вот как это делается по-простому:
for j := Image1.Picture.Bitmap.Canvas.ClipRect.Top to Image1.Picture.Bitmap.Canvas.ClipRect.Bottom-1 do
begin
for i := Image1.Picture.Bitmap.Canvas.ClipRect.Left to Image1.Picture.Bitmap.Canvas.ClipRect.Right-1 do
begin
Image3.Picture.Bitmap.Canvas.Pixels[i,j]:=
Image2.Picture.Bitmap.Canvas.Pixels[i,j]-
Image1.Picture.Bitmap.Canvas.Pixels[i,j];
end;
end;
Но очень тормозит. Нужно, чтобы работало быстрее. Есть вариант сделать через ScanLine, но нужно уметь работать с палитрой.
...и получить светлую полосу. Вот как это делается по-простому:
for j := Image1.Picture.Bitmap.Canvas.ClipRect.Top to Image1.Picture.Bitmap.Canvas.ClipRect.Bottom-1 do
begin
for i := Image1.Picture.Bitmap.Canvas.ClipRect.Left to Image1.Picture.Bitmap.Canvas.ClipRect.Right-1 do
begin
Image3.Picture.Bitmap.Canvas.Pixels[i,j]:=
Image2.Picture.Bitmap.Canvas.Pixels[i,j]-
Image1.Picture.Bitmap.Canvas.Pixels[i,j];
end;
end;
Но очень тормозит. Нужно, чтобы работало быстрее. Есть вариант сделать через ScanLine, но нужно уметь работать с палитрой.
Я не шарю в delphi, но думаю, что можно обойтись простым BitBlt (WINAPI) из памяти в память, указав правильный метод наложения (отличный от SRCCOPY).
Цитата:
Originally posted by Martin114
...и получить светлую полосу. Вот как это делается по-простому:
for j := Image1.Picture.Bitmap.Canvas.ClipRect.Top to Image1.Picture.Bitmap.Canvas.ClipRect.Bottom-1 do
begin
for i := Image1.Picture.Bitmap.Canvas.ClipRect.Left to Image1.Picture.Bitmap.Canvas.ClipRect.Right-1 do
begin
Image3.Picture.Bitmap.Canvas.Pixels[i,j]:=
Image2.Picture.Bitmap.Canvas.Pixels[i,j]-
Image1.Picture.Bitmap.Canvas.Pixels[i,j];
end;
end;
Но очень тормозит. Нужно, чтобы работало быстрее. Есть вариант сделать через ScanLine, но нужно уметь работать с палитрой.
...и получить светлую полосу. Вот как это делается по-простому:
for j := Image1.Picture.Bitmap.Canvas.ClipRect.Top to Image1.Picture.Bitmap.Canvas.ClipRect.Bottom-1 do
begin
for i := Image1.Picture.Bitmap.Canvas.ClipRect.Left to Image1.Picture.Bitmap.Canvas.ClipRect.Right-1 do
begin
Image3.Picture.Bitmap.Canvas.Pixels[i,j]:=
Image2.Picture.Bitmap.Canvas.Pixels[i,j]-
Image1.Picture.Bitmap.Canvas.Pixels[i,j];
end;
end;
Но очень тормозит. Нужно, чтобы работало быстрее. Есть вариант сделать через ScanLine, но нужно уметь работать с палитрой.
Попробуй так:
Код:
За корректность синтаксиса не уверен - давно уже с Дельфями не возился. Но думаю разберешься.