![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как скопировать из одного Bitmap в другой?
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]Если можно с прозрачностью...