Как изменить границы изображения на круг - PullRequest
5 голосов
/ 22 сентября 2011

Я должен использовать изображение в качестве уведомления. Для этого Граница изображения должна иметь эллиптическую форму . Может ли кто-нибудь помочь мне изменить границу изображения в виде круга.Я упоминал, что образец изображения 10 должен быть компонентом изображения. Как я могу получить для него форму круга.

Заранее спасибо.Ваш Ракеш

enter image description here

Ответы [ 2 ]

6 голосов
/ 22 сентября 2011
const
  BORDER = 3;
Var
  Bmp : TBitmap;
  w, h: Integer;
  x, y: Integer;
begin
  Bmp:=TBitmap.Create;
  try
    Bmp.PixelFormat:=pf24bit;
    Bmp.Canvas.Font.Name  :='Arial';                            // set the font to use
    Bmp.Canvas.Font.Size  :=20;                                 //set the size of the font
    Bmp.Canvas.Font.Color := clWhite;                           //set the color of the text
    w          :=Bmp.Canvas.TextWidth(IntToStr(sped1.Value));   //calculate the width of the image
    h          :=Bmp.Canvas.TextHeight(IntToStr(sped1.Value));  //calculate the height of the image
    Bmp.Width  := Max(w, h) + BORDER * 2;                       // get a square
    Bmp.Height := Max(w, h) + BORDER * 2;                       // get a square
    x          := (Bmp.Width  - w) div 2;                       // center
    y          := (Bmp.Height - h) div 2;                       // center
    Bmp.Canvas.Brush.Color := clBlue;                           //set the background
    Bmp.Canvas.FillRect(Rect(0,0, Bmp.Width, Bmp.Height));      //paint the background which is transparent
    Bmp.Canvas.Brush.Color := clRed;                            // circle in red
    Bmp.Canvas.Pen.Color   := clRed;                            // circle in red
    Bmp.Canvas.Ellipse(0, 0, Bmp.Width, Bmp.Height);            // draw the circle
    Bmp.Canvas.TextOut(x, y, IntToStr(sped1.Value));            //draw the number
    img1.Picture.Assign(bmp);                                   // assign the bmp to the image ; image.transparent = true, .stretch = true;
  finally
    Bmp.Free;
  end;

Настройте различные значения на то, что вам нужно ... enter image description here


Обновлен источник с RRUZ

3 голосов
/ 22 сентября 2011

Если вы называете всплывающее окно уведомлением, вы можете использовать windows регионов .Это позволит вам создать фасонное окно любой формы, которую вы пожелаете.

Здесь - более общий ответ, который включает:

procedure TForm1.DrawEllipticRegion(wnd : HWND; rect : TRect);
begin
  rgn := CreateEllipticRgn(rect.left, rect.top, rect.right, rect.bottom);
  SetWindowRgn(wnd, rgn, TRUE);
end;

Надеюсь, это то, что выИщите!

...