Главная страница
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.02 c
1-1234880388
Константин
2009-02-17 17:19
2010.01.31
Перевод ASCI в HEX и наоборот?


2-1260200531
Drowsy
2009-12-07 18:42
2010.01.31
Как правильно завершить программу без появления главного окна


2-1260428642
Deniskov
2009-12-10 10:04
2010.01.31
Как получить расшифровку логина WIndows


1-1234983949
alexis
2009-02-18 22:05
2010.01.31
перенаправить с одного порта на другой


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