Главная страница
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.009 c
1-1234695610
stas
2009-02-15 14:00
2010.01.31
TWebbrowser получить картинки


15-1259011816
Юрий
2009-11-24 00:30
2010.01.31
С днем рождения ! 24 ноября 2009 вторник


4-1227649316
KilkennyCat
2008-11-26 00:41
2010.01.31
Как из сервиса получить доступ к реестру пользователя?


2-1260327565
furyman
2009-12-09 05:59
2010.01.31
Excel в Delphi


2-1260359848
mefodiy
2009-12-09 14:57
2010.01.31
Копирование прикрепленных файлов в Microsoft Outlook