Przezroczysty Text

0

Witam, mam do zrobienia programik wstawiający znak wodny,
lecz nie mam pojęcia jak zrobić przezroczystość tekstu.
Proszę o pomoc.

Póki co mam coś takiego:

 
void __fastcall TForm2::BMarkPutClick(TObject *Sender)
{
 Image->Canvas->Draw(CSpinX->Value-Image2->Width/2, //obiera miejsce wstawienia
 CSpinY->Value-Image2->Height/2,
 Form2->Image2->Picture->Bitmap);


  Image->Canvas->Font->Name = FontDialog1->Font->Name; 
  Image->Canvas->Font->Size = FontDialog1->Font->Size;
  Image->Canvas->Font->Color = FontDialog1->Font->Color;
  Image->Canvas->Brush->Color = bsClear;
  Image->Canvas->Brush->Style = bsClear;

  LOGFONT LogFont;
  GetObject(FontDialog1->Font->Handle, sizeof(LOGFONT), &LogFont);
  LogFont.lfEscapement = CSpinAlfa->Value*10;  //kat pod jakim wpisze tekst
  LogFont.lfOrientation = CSpinAlfa->Value*10;
  Image->Canvas->Font->Handle = CreateFontIndirect(&LogFont);
  Image->Canvas->TextOut(CSpinX->Value, CSpinY->Value, EText->Text);
}
0

dodam że korzystam z BCB 6.

0

no i? tak trudno zamienić . na -> ?????

0

gdyby to były tyko . i -> to nie

Niestety nie znam się za bardzo na pascalu...
próbowałem coś z tym kodem zrobić ale nic z tego nie wyszło :/

0

Pomógł by ktoś to przekonwertować na bcb?

procedure AddWatermark(bmp: TBitmap; alpha: single; txt: string);
type
  TLine = array [0..1023] of TRGBTriple;
var
  wm : TBitmap;
  src_x, src_y, dst_x, dst_y : integer;
  dst, src : ^TLine;
begin
// create a watermark
wm := TBitmap.Create;
with wm, Canvas, Font do begin
  PixelFormat := pf24bit;
  Name := 'Courier New';
  Size := 11;
  Style := [fsBold];
  wm.Width := TextWidth(txt) + 20;
  wm.Height := TextHeight(txt) + 5;
  TextOut(10, 5, txt);
end;
// put watermark on bmp
dst_y := bmp.Height - wm.Height - 10;
for src_y := 0 to wm.Height - 1 do begin
  src := wm.ScanLine[src_y];
  dst := bmp.ScanLine[dst_y];
  dst_x := bmp.Width - wm.Width - 10;
  for src_x := 0 to wm.Width - 1 do begin
    dst[dst_x].rgbtRed   := trunc(dst[dst_x].rgbtRed   * (1 - alpha) + src[src_x].rgbtRed   * alpha);
    dst[dst_x].rgbtGreen := trunc(dst[dst_x].rgbtGreen * (1 - alpha) + src[src_x].rgbtGreen * alpha);
    dst[dst_x].rgbtBlue  := trunc(dst[dst_x].rgbtBlue  * (1 - alpha) + src[src_x].rgbtBlue  * alpha);
    inc(dst_x);
  end;
  dst_y := dst_y + 1;
end;
wm.Destroy;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  jpg : TJPEGImage;
  bmp : TBitmap;
begin
bmp := TBitmap.Create;
jpg := TJPEGImage.Create;
jpg.LoadFromFile('E:\05-28-07_1820370.jpg');
bmp.Assign(jpg);
jpg.Destroy;
bmp.PixelFormat := pf24bit;
AddWatermark(bmp, 0.5, 'i was here');
Canvas.Draw(0, 0, bmp);
bmp.Destroy;
end;
0

bump

0

Póki co mam tyle:

__fastcall TForm1::AddWatermark(Graphics::TBitmap bmp, double alpha, String txt)
{
TRGBTriple Tline[1023];
Graphics::TBitmap *wm;
int src_x, src_y, dst_x, dst_y;
//TLine dst, src;

wm->PixelFormat=pf24bit;
wm->Canvas->Font->Name="Courier New";
wm->Canvas->Font->Size=11;
//wm->Canvas->Font->Style=fsBold;
wm->Width=wm->Canvas->TextWidth(txt)+20;
wm->Height=wm->Canvas->TextHeight(txt)+5;
wm->Canvas->TextOutA(10,5,txt);

dst_y = bmp.Height - wm->Height - 10;
for (src_y=0; src_y <= wm->Height - 1; src_y++)
{ // src = wm.ScanLine[src_y];
//  dst = bmp.ScanLine[dst_y];
  dst_x = bmp.Width - wm->Width - 10;
  for (src_x = 0; src_x <= wm->Width - 1; src_x++)
  {//dst[dst_x].rgbtRed   := trunc(dst[dst_x].rgbtRed   * (1 - alpha) + src[src_x].rgbtRed   * alpha);
   //dst[dst_x].rgbtGreen := trunc(dst[dst_x].rgbtGreen * (1 - alpha) + src[src_x].rgbtGreen * alpha);
   //dst[dst_x].rgbtBlue  := trunc(dst[dst_x].rgbtBlue  * (1 - alpha) + src[src_x].rgbtBlue  * alpha);
   //inc(dst_x);
  }
  dst_y += + 1;
}

delete wm;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Graphics::TBitmap *bmp;

bmp->LoadFromFile("wow.bmp");
bmp->PixelFormat = pf24bit;
//AddWatermark(bmp, 0.5, "test");
Canvas->Draw(0, 0, bmp);
delete bmp;
}

zakomentowane mi nie kompiluje

0
  1. tutaj //wm->Canvas->Font->Style=fsBold; powinno być //wm->Canvas->Font->Style = [fsBold]; Style to zbiór
  2. w c++ nie ma operatora :=
  3. nie kompiluje czyli co??
0

TLine dst, src; [C++ Error] Unit1.cpp(22): E2451 Undefined symbol 'TLine'
wm->Canvas->Font->Style = [fsBold]; [C++ Error] Unit1.cpp(27): E2188 Expression syntax
AddWatermark(bmp, 0.5, "test"); [C++ Error] Unit1.cpp(55): E2034 Cannot convert 'TBitmap *' to 'TBitmap'

1 użytkowników online, w tym zalogowanych: 0, gości: 1