Fandom

Delphi Programming

GDI Plus

2,918pages on
this wiki
Add New Page
Talk0 Share

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

How do I create a rounded rectEdit

function CreateRoundRectangle(rectangle: TGPRect;
  radius: integer): TGPGraphicsPath;
var
  path : TGPGraphicsPath;
  l, t, w, h, d : integer;
begin
  path := TGPGraphicsPath.Create;
  l := rectangle.X;
  t := rectangle.y;
  w := rectangle.Width;
  h := rectangle.Height;
  d := radius div 2; // divide by 2

  // the lines beween the arcs are automatically added by the path
  path.AddArc(l, t, d, d, 180, 90); // topleft
  path.AddArc(l + w - d, t, d, d, 270, 90); // topright
  path.AddArc(l + w - d, t + h - d, d, d, 0, 90); // bottomright
  path.AddArc(l, t + h - d, d, d, 90, 90); // bottomleft
  path.CloseFigure();
  result := path;
end;

How do I flip textEdit

procedure TForm29.PaintBox1Paint(Sender: TObject);
var
  graphics : TGPGraphics;
  FontFamily: TGPFontFamily;
  Font: TGPFont;
  SolidBrush: TGPSolidBrush;
  Matrix : TGPmatrix;
  SolidPen : TGPPen;
  r : TGPrectF;
  GraphicsPath : TGPGraphicsPath;
begin
  graphics   := TGPGraphics.Create(PaintBox1.Canvas.handle);
  FontFamily := TGPFontFamily.Create('Times New Roman');
  Font       := TGPFont.Create(FontFamily, 32, FontStyleRegular, UnitPixel);
  SolidBrush := TGPSolidBrush.Create(MakeColor(255, 0, 0, 255));
  SolidPen := TGPPen.Create(MakeColor(255, 0, 0, 255));

//  graphics.SetTextRenderingHint(TextRenderingHintAntiAlias);

// so you can see the box
  graphics.drawRectangle(SolidPen, MakeRect(0,0,PaintBox1.Width-1, PaintBox1.height-1));

// the normal text offset to the right half of the paintbox
  graphics.TranslateTransform(PaintBox1.width div 2, 0);
  graphics.DrawString('AntiAlias', -1, font, MakePoint(0.0, 0.0), solidBrush);

  // x mirror
  matrix := TGPMatrix.Create(-1,0,0,1,PaintBox1.width div 2,0);
  graphics.settransform(matrix);
  graphics.DrawString('AntiAlias', -1, font, MakePoint(0.0, 0.0), solidBrush);
  matrix.free;

  // y mirror
  matrix := TGPMatrix.Create(1,0,0,-1,PaintBox1.width div 2,PaintBox1.height);
  graphics.settransform(matrix);
  graphics.DrawString('AntiAlias', -1, font, MakePoint(0.0, 0.0), solidBrush);
  matrix.free;

  // x and y mirror
  matrix := TGPMatrix.Create(-1,0,0,1,PaintBox1.width div 2,0);
  graphics.settransform(matrix);
  matrix.free;
  matrix := TGPMatrix.Create(1,0,0,-1,0,PaintBox1.height);
  graphics.multiplytransform(matrix);
  graphics.DrawString('AntiAlias', -1, font, MakePoint(0.0, 0.0), solidBrush);
  matrix.free;

  graphics.Free;
  FontFamily.Free;
  Font.Free;
  SolidBrush.Free;
end; 

How do I Access the pixels in a GDI+ bitmap? Edit

This assumes a 32 bit pixel depth. To access the pixels, first lock the bitmap and obtain a TBitmapData. The TBitmapData structure contains information about the bitmap and a pointer to the first scanline. To use the scanline like the TBitmap call the scanline function for the row required. See the example below.

function lockBitmap(Bitmap : TGPBitmap) : TBitmapData;
var
  r : TGPRect;
begin
  r.x := 0;
  r.y := 0;
  r.width := bitmap.getWidth;
  r.height := bitmap.getHeight;

  Bitmap.LockBits(r, ImageLockModeRead or ImageLockModeWrite,
    Bitmap.GetPixelFormat, result);
end;

function Scanline(BitmapData : TBitmapData; Row : integer) : PRGBQuad;
begin
    result := bitmapData.Scan0;
    inc(PByte(result), Row * bitmapData.stride);
end;

procedure doStuff(Bitmap :TGPBitmap);
Var
  Row, Col : integer;
  theRow  : PRGBQuad;
  pixel : TRGBQuad;
  BitmapData : TBitmapData;
begin
  BitmapData := lockBitmap(Bitmap);
  for Row := 0 to bitmapData.Height - 1 do
  begin
    theRow := Scanline(BitmapData, Row);
    for Col := 0 to Bitmap.getWidth - 1 do
    begin
      pixel := theRow^;
      ..do stuff..
      inc(theRow);
    end;
  end;
  Bitmap.UnLockBits(bitmapData);
end;

How Do I create a rounded rectangle in GDI+Edit

function CreateRoundRectangle(rectangle: TGPRect;
  radius: integer): TGPGraphicsPath;
var
  path : TGPGraphicsPath;
  l, t, w, h, d : integer;
begin
  path := TGPGraphicsPath.Create;
  l := rectangle.X;
  t := rectangle.y;
  w := rectangle.Width;
  h := rectangle.Height;
  d := radius div 2; // divide by 2

  // the lines beween the arcs are automatically added by the path
  path.AddArc(l, t, d, d, 180, 90); // topleft
  path.AddArc(l + w - d, t, d, d, 270, 90); // topright
  path.AddArc(l + w - d, t + h - d, d, d, 0, 90); // bottomright
  path.AddArc(l, t + h - d, d, d, 90, 90); // bottomleft
  path.CloseFigure();
  result := path;
end;

See also Edit

Also on Fandom

Random Wiki