基本信息
源码名称:汉字点阵化
源码大小:0.21M
文件格式:.rar
开发语言:Pascal
更新时间:2025-07-31
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍

汉字点阵化




procedure TForm1.GenerateDotMatrix(Ch: WideChar);
var
  Pixels: TBits;
  X, Y: Integer;
  StartX, StartY: Integer;
  CharWidth, CharHeight: Integer;
  MinX, MinY, MaxX, MaxY: Integer;
  OffsetX, OffsetY: Integer;
begin
  Pixels := GetCharacterPixels(Ch);
  try
    // Çå¿ÕÔ¤ÀÀÇø²¢»æÖÆÍø¸ñºÍ±àºÅ
    imgPreview.Canvas.Brush.Color := clWhite;
    imgPreview.Canvas.FillRect(Rect(0, 0, imgPreview.Width, imgPreview.Height));
    DrawGridAndNumbers(imgPreview.Canvas);

    StartX := FNumberArea;
    StartY := FNumberArea;
    
    // ³õʼ»¯±ß½çÖµ
    MinX := FMatrixSize;
    MinY := FMatrixSize;
    MaxX := -1;
    MaxY := -1;
    
    // ¼ÆËã×Ö·ûµÄʵ¼Ê±ß½ç£¨×îСºÍ×î´óX/Y×ø±ê£©
    for Y := 0 to FMatrixSize - 1 do
    begin
      for X := 0 to FMatrixSize - 1 do
      begin
        if Pixels.Bits[Y * FMatrixSize X] then
        begin
          if X < MinX then
            MinX := X;
          if Y < MinY then
            MinY := Y;
          if X > MaxX then
            MaxX := X;
          if Y > MaxY then
            MaxY := Y;
        end;
      end;
    end;
    
    // Èç¹ûûÓÐÏñËØ£¨¿Õ°××Ö·û£©£¬ÔòʹÓÃĬÈÏÖµ
    if (MinX > MaxX) or (MinY > MaxY) then
    begin
      MinX := 0;
      MaxX := FMatrixSize - 1;
      MinY := 0;
      MaxY := FMatrixSize - 1;
    end;
    
    // ¼ÆËã×Ö·ûʵ¼Ê¿í¶ÈºÍ¸ß¶È
    CharWidth := MaxX - MinX 1;
    CharHeight := MaxY - MinY 1;
    
    // ¼ÆËã¾ÓÖÐÆ«ÒÆÁ¿£¨È·±£²»»á³¬³ö±ß½ç£©
    OffsetX := (FMatrixSize - CharWidth) div 2 - MinX;
    OffsetY := (FMatrixSize - CharHeight) div 2 - MinY;
    
    // ÏÞÖÆÆ«ÒÆÁ¿£¬È·±£²»»á³¬³öµãÕó·¶Î§
    OffsetX := Max(-MinX, Min(FMatrixSize - 1 - MaxX, OffsetX));
    OffsetY := Max(-MinY, Min(FMatrixSize - 1 - MaxY, OffsetY));
    
    // »æÖƵãÕ󣨾ÓÖÐÏÔʾ£©
    for Y := 0 to FMatrixSize - 1 do
    begin
      for X := 0 to FMatrixSize - 1 do
      begin
        // ¼ÆËãԭʼÏñËØÎ»Öã¨Ó¦ÓÃÆ«ÒÆÁ¿£©
        if (X - OffsetX >= 0) and (X - OffsetX < FMatrixSize) and (Y - OffsetY
          >= 0) and (Y - OffsetY < FMatrixSize) then
        begin
          if Pixels.Bits[(Y - OffsetY) * FMatrixSize (X - OffsetX)] then
          begin
            imgPreview.Canvas.Brush.Color := clBlack;
            imgPreview.Canvas.FillRect(Rect(StartX X * FDotSize 1, StartY
              Y * FDotSize 1, StartX (X 1) * FDotSize - 1, StartY (Y 1)
              * FDotSize - 1));
          end;
        end;
      end;
    end;
  finally
    Pixels.Free;
  end;
end;