نمایش نتایج 1 تا 16 از 16

نام تاپیک: چطور می تونم یک دایره با کیفیت در دلفی رسم کنم ؟

  1. #1

    چطور می تونم یک دایره با کیفیت در دلفی رسم کنم ؟

    من یک shape روی فرم گذاشتم و شکل آن را دایره کردم لبه های دایره کیفیت پایینی داره چطور می تونم یک دایره با کیفیت بالا رسم کنم.

    Circle.JPG

  2. #2

    نقل قول: چطور می تونم یک دایره با کیفیت در دلفی رسم کنم ؟

    عزیزم این کامپوننت فقط به همین صورت دایره یا اشکال رو رسم میکنه
    اگه میخوای اشکال گرافیکی با کیفیت داشته باشی ، بهتره از مجموعه کامپوننت های TMS استفاده کنی که کیفیت طراحی هاش خیلی بالاتره

  3. #3

    نقل قول: چطور می تونم یک دایره با کیفیت در دلفی رسم کنم ؟

    ممنون اما tms هم از این بهتر دایره رو نمی کشه لطفا یک راه عملی پیشنهاد بدید متشکرم
    Circle2.JPG

  4. #4

    نقل قول: چطور می تونم یک دایره با کیفیت در دلفی رسم کنم ؟

    کلا برای چه کاری لازم داری دایره رسم کنی
    شاید یک روش بهتر از ترسیم دایره وجود داشته باشه

  5. #5

    نقل قول: چطور می تونم یک دایره با کیفیت در دلفی رسم کنم ؟

    من عکس پرسنل را می خواهم در دایره نمایش دهم هم از Canvas فرم استفاده کردم هم از Shape در هر دو روش مشکل اینه که حاشیه دایره (تصویر) کیفیت پایینی داره و مشتری این را اشکال گرفته
    از راهنمایی دوستان متشکرم.
    https://barnamenevis.org/showthread.p...8C%D8%B1%D9%87

  6. #6

    نقل قول: چطور می تونم یک دایره با کیفیت در دلفی رسم کنم ؟

    شما با هر چیزی دایره بکشی همین می شه مگر این که سایه زنی کنی.
    تکنیک های سایه زنی هم راحت نیست.
    یک پیشنهاد، دایره رو در بیت مپ در حافظه بصورت بزرگ و با خط پررنگ بکشید، بعد اون رو بصورت استرچ شده دربیارید. امتحان کنید ببینید بهتر می شه؟
    توابع تبدیل تاریخ با دقت 5000 سال
    پذیرش پروژه، کامپوننت، آموزش برنامه نویسی (دلفی، اس کیو ال، ..) -> 09123780840

    دوستای گلم حمایت کنید : https://cafebazaar.ir/app/com.nikanmehr.marmarxword/


    نرم افزار پخش مویرگی

  7. #7

    نقل قول: چطور می تونم یک دایره با کیفیت در دلفی رسم کنم ؟

    توصیه میکنم به جای استفاده از کامپوننت Shape از کنترل Image همراه با یک تصویر PNG استفاده کنید
    خیلی راحت یک عکس بزارید که یک دایره با کیفیت داخلش باشه
    بعد عکس خودتون رو در داخل اون دایره نمایش بدید

    یا حق

  8. #8
    کاربر دائمی آواتار Ananas
    تاریخ عضویت
    آبان 1390
    محل زندگی
    طول 50 و عرض 34 درجه
    سن
    36
    پست
    894

    نقل قول: چطور می تونم یک دایره با کیفیت در دلفی رسم کنم ؟

    سلام.
    یک نمونه که یک سری آپشن اضافی هم داره:

    Graphics::TBitmap * DrawCycleBlure(
    Graphics::TBitmap * b,
    const float X,
    const float Y,
    const float R,
    const float LineWidth,
    const float FadeWidth,
    const float FaceMulti)
    {
    for (int j = 0; j < b->Height; j++)
    {
    for (int i = 0; i < b->Width; i++)
    {
    float x = (float)i - X;
    float y = (float)j - Y;
    float c = fabs(R - sqrt(x * x + y * y));
    if (c < LineWidth)
    {
    b->Canvas->Pixels[i][j] = 0x00000000L;
    }
    else
    {
    c = (c - LineWidth) / FadeWidth;
    if (c > 1.0f) c = 1.0f;
    c = (1.0f - c) * FaceMulti;
    c *= c;
    c = (1.0f - c) * 255.0f;
    DWORD d = (DWORD)c;
    d |= (d << 8) | (d << 16);
    b->Canvas->Pixels[i][j] = d;
    };
    };
    };
    };

    void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
    int X, int Y)
    {
    Graphics::TBitmap * b = new Graphics::TBitmap();
    int w = this->ClientWidth;
    int h = this->ClientHeight;

    b->SetSize(w, h);
    DrawCycleBlure(b, (float)X * 0.5f, (float)Y * 0.5f, (float)X * 0.5f, 0.5f, 1.0f, 1.0f);

    this->Canvas->Draw(0, 0, b);
    delete b;
    }
    آخرین ویرایش به وسیله Ananas : دوشنبه 01 دی 1393 در 23:04 عصر

  9. #9
    کاربر دائمی آواتار Ananas
    تاریخ عضویت
    آبان 1390
    محل زندگی
    طول 50 و عرض 34 درجه
    سن
    36
    پست
    894

    نقل قول: چطور می تونم یک دایره با کیفیت در دلفی رسم کنم ؟


    procedure DrawCycleBlure(
    b : TBitmap;
    const X, Y, R, LineWidth, FadeWidth, FaceMulti: Single);
    var
    i, j : Integer;
    lx, ly, c : Single;
    d : DWORD;
    begin
    for j := 0 to b.Height - 1 do
    begin
    for i := 0 to b.Width - 1 do
    begin
    lx := i - X;
    ly := j - Y;
    c := Abs(R - Sqrt(lx * lx + ly * ly));
    if (c < LineWidth) then
    begin
    b.Canvas.Pixels[i,j] := $00000000;
    end
    else
    begin
    c := (c - LineWidth) / FadeWidth;
    if (c > 1.0) then c := 1.0;
    c := (1.0 - c) * FaceMulti;
    c := c * c;
    c := (1.0 - c) * 255.0;
    d := Trunc(c);
    d := d or (d shl 8) or (d shl 16);
    b.Canvas.Pixels[i, j] := d;
    end;
    end;
    end;
    end;

    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    var
    b : TBitmap;
    w, h : Integer;
    begin
    b := TBitmap.Create();
    w := Self.ClientWidth;
    h := Self.ClientHeight;

    b.SetSize(w, h);
    DrawCycleBlure(b, X * 0.5, Y * 0.5, X * 0.5, 0.5, 1.0, 1.0);

    Self.Canvas.Draw(0, 0, b);
    b.Free;
    end;



  10. #10
    کاربر دائمی آواتار Jarvis
    تاریخ عضویت
    اسفند 1391
    محل زندگی
    Esfahan
    پست
    580

    نقل قول: چطور می تونم یک دایره با کیفیت در دلفی رسم کنم ؟

    شما دو راه دارید ، یا این که همونطور که دوستان گفتن بصورت استاتیک یعنی استفاده از یک فایل PNG از قبل آماده شده استفاده کنید
    اما راه دوم که داینامیک هست و عملا یکم دنگ و فنگ داره اینه که شما دایره رو بصورت یک وکتور استفاده کنید ، اینجوری توی هر سایزی با کیفیت مطلوب و ثابت براتون عملکرد خوب داره و افت کیفیت نداره
    یک نمونه اش استفاده از فایل های SVG هست ... البته شخصا استفاده از فایل های وکتور رو توی دلفی کار نکردم اما شاید دوستان اطلاعاتی در این باره داشته باشند

    موفق باشید.

  11. #11

    نقل قول: چطور می تونم یک دایره با کیفیت در دلفی رسم کنم ؟

    procedureDrawCycleBlure( b : TBitmap;
    const X, Y, R, LineWidth, FadeWidth, FaceMulti: Single);
    var
    i, j : Integer;
    lx, ly, c : Single;
    d : DWORD;
    begin
    for j := 0 to b.Height - 1 do
    begin
    for i := 0 to b.Width - 1 do
    begin
    lx := i - X;
    ly := j - Y;
    c := Abs(R - Sqrt(lx * lx + ly * ly));
    if (c < LineWidth) then
    begin
    b.Canvas.Pixels[i,j] := $00000000;
    end
    else
    begin
    c := (c - LineWidth) / FadeWidth;
    if (c > 1.0) then c := 1.0;
    c := (1.0 - c) * FaceMulti;
    c := c * c;
    c := (1.0 - c) * 255.0;
    d := Trunc(c);
    d := d or (d shl 8) or (d shl 16);
    b.Canvas.Pixels[i, j] := d;
    end;
    end;
    end;
    end;
    دوست عزیز Ananas کد شما دایره رو با کیفیت مورد نیاز رسم می کند اما من نتونستم از اون برای نمایش تصاویر پرسنل که با فرمت jpg است به شکل دایره استفاده کنم متشکر می شم از دوستان اگر بیشتر راهنمایی کنند

  12. #12
    کاربر دائمی آواتار Ananas
    تاریخ عضویت
    آبان 1390
    محل زندگی
    طول 50 و عرض 34 درجه
    سن
    36
    پست
    894

    نقل قول: چطور می تونم یک دایره با کیفیت در دلفی رسم کنم ؟

    در قسمت Uses یونیت jpeg رو اضافه کنید و :

    function ColorMultiply(const Clr: TColor; const Multi: Single):TColor;
    var
    r, g, b : Single;
    begin
    r := Multi * ( Clr and $000000FF);
    g := Multi * ((Clr and $0000FF00) shr 8);
    b := Multi * ((Clr and $00FF0000) shr 16);

    Result := ( Trunc(r) and $000000FF) or
    ((Trunc(g) and $000000FF) shl 8) or
    ((Trunc(b) and $000000FF) shl 16);
    end;

    procedure DrawCycleBlure(
    Src_Img : TJPEGImage;
    Dst_Bitm : TBitmap;
    const Radius,
    LineWidth,
    FadeWidth,
    FaceMulti : Single);

    var
    i, j, X, Y : Integer;
    lx, ly, c, leng : Single;
    d : DWORD;
    begin
    X := Dst_Bitm.Width div 2; // Cenetr.X
    Y := Dst_Bitm.Height div 2; // Center.Y

    for j := 0 to Dst_Bitm.Height - 1 do
    begin
    for i := 0 to Dst_Bitm.Width - 1 do
    begin
    lx := i - X;
    ly := j - Y;
    leng := Sqrt(lx * lx + ly * ly);
    c := Abs(Radius - leng);
    if (c < LineWidth) then
    begin
    c := 0.0;
    end
    else
    begin
    c := (c - LineWidth) / FadeWidth;
    if (c > 1.0) then c := 1.0;
    c := (1.0 - c) * FaceMulti;
    c := 1.0 - c * c;
    end;
    if (leng < Radius) then
    begin
    d := ColorMultiply(Src_Img.Canvas.Pixels[i, j], c);
    end
    else
    begin
    d := Trunc(c * 255.0);
    d := d or (d shl 8) or (d shl 16);
    end;
    Dst_Bitm.Canvas.Pixels[i, j] := d;
    end;
    end;
    end;

    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    var
    b : TBitmap;
    w, h : Integer;
    img : TJPEGImage;
    begin
    b := TBitmap.Create();
    w := Self.ClientWidth;
    h := Self.ClientHeight;

    img := TJPEGImage.Create;
    img.LoadFromFile('C:\Users\Public\Pictures\Sample Pictures\Chrysanthemum.jpg');

    b.SetSize(w, h);
    DrawCycleBlure(img, b, w * 0.5, 0.5, 1.0, 1.0);

    Self.Canvas.Draw(0, 0, b);
    b.Free;
    img.Free;
    end;

  13. #13

    نقل قول: چطور می تونم یک دایره با کیفیت در دلفی رسم کنم ؟

    کد زیر را برای نمایش عکس نوشتم
    procedure TForm2.FormPaint(Sender: TObject);var
    b : TBitmap;
    w, h : Integer;
    img : TJPEGImage;
    begin
    b := TBitmap.Create();
    w := 100 ;
    h := 100 ;
    img := TJPEGImage.Create;
    img.LoadFromFile('C:\Pic.jpg');
    b.SetSize(w, h);
    DrawCycleBlure(img, b, 48 , 0.5, 1.0, 1.0);
    Self.Canvas.StretchDraw(rect(200, 48, 300 , 148) , b);
    b.Free;
    img.Free;
    end;
    اول اینکه به نظر میاد با وجود کد stretch تصویر stretch نمی شه
    دوم جاشیه تصویر (دایره) یک مربع به رنگ سفید ایجاد می شه که نتونستم اون رو از بین ببرم

    Popup.jpg
    آخرین ویرایش به وسیله mahdy.asia : جمعه 05 دی 1393 در 22:01 عصر

  14. #14
    کاربر دائمی آواتار Ananas
    تاریخ عضویت
    آبان 1390
    محل زندگی
    طول 50 و عرض 34 درجه
    سن
    36
    پست
    894

    نقل قول: چطور می تونم یک دایره با کیفیت در دلفی رسم کنم ؟


    function ColorMultiply(const Clr: TColor; const Multi: Single):TColor;
    var
    r, g, b : Single;
    begin
    r := Multi * ( Clr and $000000FF);
    g := Multi * ((Clr and $0000FF00) shr 8);
    b := Multi * ((Clr and $00FF0000) shr 16);

    Result := ( Trunc(r) and $000000FF) or
    ((Trunc(g) and $000000FF) shl 8) or
    ((Trunc(b) and $000000FF) shl 16);
    end;

    procedure DrawCycleBlure(
    Src_Img : TJPEGImage;
    Dst_Canv : TCanvas;
    const DrawRect : TRect;
    const Radius,
    LineWidth,
    FadeWidth,
    FaceMulti : Single);

    var
    i, j, X, Y, W, H, ic, jc : Integer;
    lx, ly, c, leng : Single;
    d : DWORD;
    begin
    X := (DrawRect.Left + DrawRect.Right ) div 2; // Cenetr.X
    Y := (DrawRect.Top + DrawRect.Bottom) div 2; // Center.Y
    W := DrawRect.Right - DrawRect.Left;
    H := DrawRect.Bottom - DrawRect.Top;
    for j := 0 to H - 1 do
    begin
    for i := 0 to W - 1 do
    begin
    ic := i + DrawRect.Left; // i_Canvas
    jc := j + DrawRect.Top; // j_Canvas
    lx := ic - X;
    ly := jc - Y;
    leng := Sqrt(lx * lx + ly * ly);
    c := Abs(Radius - leng);
    if (c < LineWidth) then
    begin
    c := 0.0;
    end
    else
    begin
    c := (c - LineWidth) / FadeWidth;
    if (c > 1.0) then c := 1.0;
    c := (1.0 - c) * FaceMulti;
    c := 1.0 - c * c;
    end;
    if (leng < Radius) then
    begin
    d := ColorMultiply(Src_Img.Canvas.Pixels[i, j], c);
    end
    else
    begin
    d := ColorMultiply(Dst_Canv.Pixels[ic, jc], c);
    end;
    Dst_Canv.Pixels[ic, jc] := d;
    end;
    end;
    end;

    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    var
    img : TJPEGImage;
    begin
    img := TJPEGImage.Create;
    img.LoadFromFile('C:\Users\Public\Pictures\Sample Pictures\Chrysanthemum.jpg');
    DrawCycleBlure(img, Self.Canvas, Rect(X - 50, Y - 50, X + 50, Y + 50), 40.0 , 0.5, 1.0, 1.0);
    img.Free;
    end;

  15. #15

    نقل قول: چطور می تونم یک دایره با کیفیت در دلفی رسم کنم ؟

    وقتی موقعیت نمایش تصویر رو تغییر می دهم تصویر از وسط دایره خارج می شود، من می خواهم تصویر در موقعیت Shape دایره که من گذاشتم ایجاد شود.


    عکس های ضمیمه عکس های ضمیمه
    آخرین ویرایش به وسیله mahdy.asia : چهارشنبه 10 دی 1393 در 02:08 صبح

  16. #16
    کاربر دائمی آواتار Ananas
    تاریخ عضویت
    آبان 1390
    محل زندگی
    طول 50 و عرض 34 درجه
    سن
    36
    پست
    894

    نقل قول: چطور می تونم یک دایره با کیفیت در دلفی رسم کنم ؟

    سلام.
    ببخشید دیر جواب میدم.
    Src_Img تصویر منبع هست و تصویر رو هم ماتریسی از پیکسل ها تصور کنید. اگر موقعیت عکس شما لازمه کمی جابجا بشه کافیه به i, j ای که تو کد برای اندیس Src_Img بکار میبریم یک offset اضافه کنیم. مثلا :
    d := ColorMultiply(Src_Img.Canvas.Pixels[i + offset_x, j + offset_y], c);

    حالا offset_x و offset_y رو با اعداد مناسب با تصویرتون مقدار دهی کنید.
    در واقع تصویرتون رو به اندازهی _offset_x در راستای افقی و به اندازه ی offset_y در راستای همودی جابجا کردیم.

تاپیک های مشابه

  1. چطور می تونم حجم دریافت و ارسال اینترنت رو کنترل کنم
    نوشته شده توسط AFTABGARDAN2006 در بخش توسعه نرم افزارهای تحت شبکه
    پاسخ: 2
    آخرین پست: شنبه 03 مهر 1389, 12:08 عصر
  2. پاسخ: 2
    آخرین پست: جمعه 15 مرداد 1389, 22:31 عصر
  3. سوال: چطور می تونم به WpfUserControl در runtime یه لیبل اضافه کنم
    نوشته شده توسط ghafarifar در بخش VB.NET
    پاسخ: 0
    آخرین پست: سه شنبه 10 شهریور 1388, 17:51 عصر
  4. چطور می تونم برای یک chart بر نامه بنویسم ؟
    نوشته شده توسط babak1 در بخش برنامه نویسی در 6 VB
    پاسخ: 11
    آخرین پست: سه شنبه 09 دی 1382, 10:52 صبح
  5. چطور می تونم وارد ای اسپی بشم که ای پی اونو دارم.
    نوشته شده توسط Seyyed Mohsen Jamali در بخش امنیت در شبکه
    پاسخ: 11
    آخرین پست: دوشنبه 23 تیر 1382, 10:00 صبح

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •