Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как скопировать из одного Bitmap в другой?


Страницы:   1 2

Arazel/NikNet ©   (2005-10-25 20:30:00) 

Как скопировать из одного Bitmap в другой?

Проблема такая:
Есть Bitmap, на  котором загружено изображения
изображение состоит из  трех картинок, которые
должны меняться во время работы программы

второй Bitmap не имеет не какого изображение
вот в  него и должна загружаться одна из картинок

Суть вопроса таков:
Как мне из первого Bitmap(а) загружать одну
картинку, которая по размерам 23x26 (каждая)
в  другой, что  бы затем отобразить его?

Я пробиваю так, но не чего не получается:

        TmpBmp.Canvas.CopyRect(
         rect(0,0,23,26),
         ImgBtns.Canvas,
         Rect(0,0,23,26));


Antonn   (2005-10-26 15:35:00) [21]

Gydvin ©   (26.10.05 14:49) [5]
ого, внушает:) через scanline на порядок быстрее(чуть больше, чем на порядок):)
Gydvin ©   (26.10.05 14:55) [6]
Там все также, как в Bitblt,  только можно задавать еще и цвет фона из которого эта функция будет картинку вырезать.

я под прозрачностью понял вообще прозрачность копируемого битмапа, ну 50% например. А "прозрачный цвет" - это цвет, который не копируется.


Gydvin   (2005-10-26 14:55:00) [22]

Просто под рукой этого кода нет.
Там все также, как в Bitblt,  только можно задавать еще и цвет фона из которого эта функция будет картинку вырезать.


Gydvin   (2005-10-26 14:49:00) [23]

Antonn ©   (26.10.05 14:19) [4]

сам по себе нет, а вот если скомбинировать его вот с этим, то да, покрайнемре я гибрид делал, если надо сегодня вечером опубликую.

procedure DrawTransparentBmp(Cnv: TCanvas; x,y: Integer; Bmp: TBitmap; clTransparent: TColor);
var
 bmpXOR, bmpAND, bmpINVAND, bmpTarget: TBitmap;
 oldcol: Longint;
begin
 try
   bmpAND := TBitmap.Create;
   bmpAND.Width := Bmp.Width;
   bmpAND.Height := Bmp.Height;
   bmpAND.Monochrome := True;
   oldcol := SetBkColor(Bmp.Canvas.Handle, ColorToRGB(clTransparent));
   BitBlt(bmpAND.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, Bmp.Canvas.Handle, 0, 0, SRCCOPY);
   SetBkColor(Bmp.Canvas.Handle, oldcol);

   bmpINVAND := TBitmap.Create;
   bmpINVAND.Width := Bmp.Width;
   bmpINVAND.Height := Bmp.Height;
   bmpINVAND.Monochrome := True;
   BitBlt(bmpINVAND.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, bmpAND.Canvas.Handle, 0, 0, NOTSRCCOPY);

   bmpXOR := TBitmap.Create;
   bmpXOR.Width := Bmp.Width;
   bmpXOR.Height := Bmp.Height;
   BitBlt(bmpXOR.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, Bmp.Canvas.Handle, 0, 0, SRCCOPY);
   BitBlt(bmpXOR.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, bmpINVAND.Canvas.Handle, 0, 0, SRCAND);

   bmpTarget := TBitmap.Create;
   bmpTarget.Width := Bmp.Width;
   bmpTarget.Height := Bmp.Height;
   BitBlt(bmpTarget.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, Cnv.Handle, x, y, SRCCOPY);
   BitBlt(bmpTarget.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, bmpAND.Canvas.Handle, 0, 0, SRCAND);
   BitBlt(bmpTarget.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, bmpXOR.Canvas.Handle, 0, 0, SRCINVERT);
   BitBlt(Cnv.Handle, x, y, Bmp.Width, Bmp.Height, bmpTarget.Canvas.Handle, 0, 0, SRCCOPY);
 finally
   bmpXOR.Free;
   bmpAND.Free;
   bmpINVAND.Free;
   bmpTarget.Free;
 end;
end;


Antonn   (2005-10-26 14:19:00) [24]

Gydvin ©   (26.10.05 13:43) [3]
Bitblt

а что, это с прозрачностью может копировать?


Gydvin   (2005-10-26 13:43:00) [25]

Bitblt


Antonn   (2005-10-26 05:37:00) [26]

Arazel/NikNet   (25.10.05 20:31) [1]
попробуй одну из процедур из этого модуля:
http://kladovka.net.ru/index.cgi?pid=list&rid=252


Arazel/NikNet   (2005-10-25 20:31:00) [27]

Если  можно с прозрачностью...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо