Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.15;
Скачать: CL | DM;

Вниз

Копировать 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.066 c
2-1174759711
Леонид
2007-03-24 21:08
2007.04.15
Однотипные процедуры


3-1169626238
r2d2
2007-01-24 11:10
2007.04.15
ADOTable и внесения изменений в БД


2-1174959952
>>DEATH<<
2007-03-27 05:45
2007.04.15
помогите исправить ошибку


1-1171893072
tytus
2007-02-19 16:51
2007.04.15
Доступ к Java 1.4.2_05 из Delphi


15-1174458723
Post_
2007-03-21 09:32
2007.04.15
Web- кам...