Форум: "Начинающим";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];
ВнизКопировать Bitmap без задего фона на Canvas.... Найти похожие ветки
← →
Moden (2007-03-26 14:04) [0]Я думал, что BrushCopy используется для этого, пишу такой код
imgMap.Canvas.BrushCopy(Rect((i - 1) * 50, (j - 1) * 50, i * 50, j * 50),
BM, Rect(0, 0, 49, 49), $A0A0A4);
но он просто полностью копирует Bitmap на Canvas...
А как правильно?
← →
Moden (2007-03-26 15:39) [1]Никто не знает, чтоли?
← →
Джо © (2007-03-26 15:49) [2]Что значит «Bitmap без задего фона»?
← →
Moden (2007-03-26 15:58) [3]Джо © (26.03.07 15:49) [2]
Есть Bitmap, картинка с рисунком по середине и вокруг (Bitmap ведь прямоугольный) цвет фона, а я хочу наложить только ту часть картинки, которая без этого фона...
← →
easy © (2007-03-26 15:59) [4]
> Я думал, что BrushCopy используется для этого
правильно думал
← →
Джо © (2007-03-26 15:59) [5]Bitmap — это единое изображение, у него никакого заднего фона нету.
← →
Moden (2007-03-26 16:00) [6]easy © (26.03.07 15:59) [4]
А что тогда не так??
← →
Moden (2007-03-26 16:02) [7]Джо © (26.03.07 15:59) [5]
Конечно нету, фон - это условно...
← →
easy © (2007-03-26 16:13) [8]
procedure TForm1.FormPaint(Sender: TObject);
var
bmp:TBitmap;
R:TRect;
path:array[0..MAX_PATH] of char;
begin
GetWindowsDirectory(path,MAX_PATH);
bmp:=TBitmap.Create;
bmp.LoadFromFile(path+"\winnt.bmp");
R:=rect(0,0,bmp.Width,bmp.Height);
canvas.BrushCopy(R,bmp,R,clblack);
bmp.Free;
end;
← →
easy © (2007-03-26 16:13) [9]копируется?
← →
Moden (2007-03-26 16:23) [10]Странно, копируется... Сейчас еще посмотрю...
← →
Moden (2007-03-26 18:31) [11]easy © (26.03.07 16:13) [8]
Все ясно... Пример работает... Но мне нужно другое...
На канве нарисован один рисунок, я накладываю сверху другой, как "апликацию", то есть там, где у накладываемого рисунка "фон" (одноцветная внешняя область) сохраняется рисунок канвы...
← →
easy © (2007-03-26 19:08) [12]http://dfc.com.ru/download.php?d=mask 6kb
← →
Moden (2007-03-26 20:03) [13]to easy Спасибо///
← →
Gydvin © (2007-03-26 22:12) [14]
> easy © (26.03.07 19:08) [12]
Не прикольно. ScanLine лучше имхо
← →
Moden (2007-03-26 22:15) [15]Gydvin © (26.03.07 22:12) [14]
А как ScanLine использовать для моей задачи?
← →
Gydvin © (2007-03-26 22:34) [16]Например так
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure DrawTransparentBmp(Cnv: TCanvas; x,y,Width1,Height1: Integer;
Bmp: TBitmap;xsrs1,ysrs1:integer; clTransparent: TColor);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
bmpTarget,bmpTarget1: TBitmap;
public
{ Public declarations }
end;
var
Form1: TForm1;
type
TRGB=record
b,g,r:byte;
end;
ARGB=array [0..1] of TRGB;
PARGB=^ARGB;
implementation
{$R *.dfm}
procedure tform1.DrawTransparentBmp(Cnv: TCanvas; x,y,Width1,Height1: Integer;
Bmp: TBitmap;xsrs1,ysrs1:integer; clTransparent: TColor);
var
b,b1:pargb;
x1,y1,a1r,a1g,a1b,b1r,b1g,b1b:integer;
function ColorToRGB(Color: TColor): TRGB;
begin
with Result do begin
R := Lo(Color);
G := Lo(Color shr 8);
B := Lo((Color shr 8) shr 8);
end;
end;
begin
a1r:=ColorToRGB(clTransparent).r;
a1g:=ColorToRGB(clTransparent).g;
a1b:=ColorToRGB(clTransparent).b;
bmpTarget.Width:=Width1;
bmpTarget.Height:=Height1;
bmpTarget1.Width:=Width1;
bmpTarget1.Height:=Height1;
BitBlt(bmpTarget1.Canvas.Handle, 0, 0, Width1, Height1, Cnv.Handle, x, y, SRCCOPY);
BitBlt(bmpTarget.Canvas.Handle, 0, 0, Width1, Height1, Bmp.Canvas.Handle, xsrs1,ysrs1, SRCCOPY);
for y1:=0 to Height1-1 do begin
b:=bmpTarget.ScanLine[y1];
b1:=bmpTarget1.ScanLine[y1];
for x1:=0 to Width1-1 do
if (b[x1].r=a1r)and(b[x1].g=a1g)and(b[x1].b=a1b) then else begin
b1[x1]:=b[x1];
end;
end ;
BitBlt(cnv.Handle, x, y, Bmp.Width, Bmp.Height, bmpTarget1.Canvas.Handle, 0, 0, SRCCOPY);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
bmpTarget:= TBitmap.Create;
bmpTarget1:= TBitmap.Create;
bmpTarget.PixelFormat:=pf24bit;
bmpTarget1.PixelFormat:=pf24bit;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
bmpTarget.Free;
bmpTarget1.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
bitmap:tbitmap;
begin
bitmap:=tbitmap.Create;
bitmap.LoadFromFile("c:\test.bmp");
DrawTransparentBmp(canvas,0,0,bitmap.Width,bitmap.Height,bitmap,0,0,clred);
bitmap.Free;
end;
end.
Фоновый цвет clred
← →
Gydvin © (2007-03-26 22:36) [17]при желании можно делать анимацию
← →
Gydvin © (2007-03-26 22:54) [18]
> a1r:=ColorToRGB(clTransparent).r;
> a1g:=ColorToRGB(clTransparent).g;
> a1b:=ColorToRGB(clTransparent).b;
>.....
>if (b[x1].r=a1r)and(b[x1].g=a1g)and(b[x1].b=a1b) then else begin
> b1[x1]:=b[x1];
> end;
Эт конешно лажа
лучше такvar
rgb1:trgb
......
rgb1:=ColorToRGB(clTransparent);
.....
if not((b[x1].r=rgb1.r)and(b[x1].g=rgb1.g)and(b[x1].b=rgb1.b)) then [x1]:=b[x1];
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.04.15;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.048 c