Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.01.31;
Скачать: CL | DM;

Вниз

Как наложить одну картинку на другую?   Найти похожие ветки 

 
Леонид Артюхов   (2009-12-09 08:37) [0]

Привет,

Делаю так:
procedure MixBMP(BM1, BM2: TBitMap; var BM: TBitMap);
var
 I, J: Integer;
 MinW, MinH: Integer;
begin
 BM := TBitMap.Create;
 if BM1.Width < BM2.Width then
   MinW := BM1.Width
 else
   MinW := BM2.Width;
 if BM1.Height < BM2.Height then
   MinH := BM1.Height
 else
   MinH := BM2.Height;
 BM.Width := MinW;
 BM.Height := MinH;
 for I := 0 to MinW do
   for J := 0 to MinH do
     if (Odd(I) and Odd(J)) or ((not (Odd(I))) and (not (Odd(J)))) then
       BM.Canvas.Pixels[I, J] := BM1.Canvas.Pixels[I, J]
     else
       BM.Canvas.Pixels[I, J] := BM2.Canvas.Pixels[I, J];
end;

...
var
 NalBitmap: TBitMap;
begin
 NalBitmap := TBitmap.Create;
 try
   MixBMP(Image1.Picture.Bitmap, Image2.Picture.Bitmap, NalBitmap);
   Image1.Picture.Bitmap := NalBitmap;
   Image1.Refresh;
 finally
   NalBitmap.Free;
 end;
...


В итоге Image1(Основной битмап) затирается и виден только Image2(Налаживаемый битмап), что я делаю не так?


 
brother ©   (2009-12-09 09:25) [1]

и откуда этот тормозной код?


 
Леонид Артюхов   (2009-12-09 09:34) [2]


> brother ©   (09.12.09 09:25) [1]


Копипаст из инета!


 
MBo ©   (2009-12-09 09:44) [3]

В циклах верхняя граница неправильная, нужно единицу отнять
сложный if можно заменить на (условие будет обратным, ветки поменять)
if Odd(I) xor Odd(J) then
или
if Odd(i + j)

в функции зачем делается
BM := TBitMap.Create;
?


 
Леонид Артюхов   (2009-12-09 10:12) [4]


> BM := TBitMap.Create;


В процедуре, думаю что не к чему!


 
Леонид Артюхов   (2009-12-09 10:27) [5]

Сделал так, не помогло, но скорее всего я не так все исправил!
procedure MixBMP(BM1, BM2: TBitMap; var BM: TBitMap);
var
 I, J: Integer;
 MinW, MinH: Integer;
begin
 if BM1.Width < BM2.Width then
   MinW := BM1.Width
 else
   MinW := BM2.Width;
 if BM1.Height < BM2.Height then
   MinH := BM1.Height
 else
   MinH := BM2.Height;
 BM.Width := MinW;
 BM.Height := MinH;
 for I := 0 to MinW do
   for J := 0 to MinH -1 do
     if Odd(i + j) then
       BM.Canvas.Pixels[I, J] := BM1.Canvas.Pixels[I, J]
     else
       BM.Canvas.Pixels[I, J] := BM2.Canvas.Pixels[I, J];
end;



Страницы: 1 вся ветка

Текущий архив: 2010.01.31;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
15-1259162313
Кто б сомневался
2009-11-25 18:18
2010.01.31
Завести почту на google


2-1260256589
AIK
2009-12-08 10:16
2010.01.31
приложение не передаёт в ms SQl русские буквы


1-1229112643
ivak
2008-12-12 23:10
2010.01.31
Собственный курсор


15-1259345408
werty
2009-11-27 21:10
2010.01.31
что такое mailto?


2-1260278642
Danco
2009-12-08 16:24
2010.01.31
Поместить картинку из TWebBrowser в TImage