Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.044 c
2-1174844115
Mary_Sunlight
2007-03-25 21:35
2007.04.15
BDE


2-1174459124
Kolan
2007-03-21 09:38
2007.04.15
Люди, помогите отладить «List out of bounds» :)


15-1174543153
FIkus
2007-03-22 08:59
2007.04.15
Вопрос электрикам


15-1174490853
oldman
2007-03-21 18:27
2007.04.15
Почти пятничные задачки для второго класса...


2-1174941046
ba+ya
2007-03-27 00:30
2007.04.15
Свойства системы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский