首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

使用 C++Builder 實作特殊螢幕顯示效果 (圖像轉場動畫)

     編輯:關於C++

C++Builder 5/6 時代的 GDI 圖像轉場特效實作

利用 Windows GDI 將視窗視為畫布,透過 TCanvas::CopyRect、MoveTo/LineTo、區域 (HRGN) 操作實作 17 種圖像進場/轉場動畫效果。

核心架構

  • 載入位圖:TBitmap::LoadFromFile,處理 256 色調色盤
  • 動畫迴圈:for 迴圈逐步繪製 + for(j=0;j<10000;j++); 簡易延遲
  • 繪圖原語:CopyRect (區塊複製)、MoveTo/LineTo (掃描線效果)、CreateEllipticRgn (圓形擴散)

17 種效果分類

類別效果項目核心技術
分割/合併左右分開/合攏雙 CopyRect 對稱展開/收斂
上下分開/合攏同上,垂直方向
左右錯位上下半部相反方向平移
上下錯位左右半部相反方向平移
平移進場左/右/上/下 移入單 CopyRect 來源/目標矩形逐步位移
刷屏掃描左/右/上/下 刷屏單側邊緣逐行/列複製
流水效果上→下 / 下→上雙重迴圈逐行複製產生波浪感
圓形擴散圓形展開CreateEllipticRgn + SelectObject 裁剪繪圖

關鍵程式碼片段

// 範例:左右分開 (Items1)
void __fastcall TForm1::Item1Click(TObject *Sender) {
    Form1->Refresh();
    int WideHalf = Bitmap1->Width / 2 + Bitmap1->Width % 2;
    for (int i = 0; i <= WideHalf; i++) {
        TRect Dest(WideHalf - i, 0, WideHalf + i, Bitmap1->Height);
        TRect Src(WideHalf - i, 0, WideHalf + i, Bitmap1->Height);
        Form1->Canvas->CopyRect(Dest, Bitmap1->Canvas, Src);
        for (int j = 0; j < 10000; j++);  // 簡易延遲
    }
}

// 範例:圓形展開 (Items15)
void __fastcall TForm1::Item15Click(TObject *Sender) {
    Form1->Refresh();
    int maxR = sqrt(Bitmap1->Width*Bitmap1->Width + Bitmap1->Height*Bitmap1->Height) / 2 + 4;
    for (int i = 1; i <= maxR; i++) {
        HRGN rgn = CreateEllipticRgn(
            Bitmap1->Width/2 - i, Bitmap1->Height/2 - i,
            Bitmap1->Width/2 + i, Bitmap1->Height/2 + i);
        SelectObject(Canvas->Handle, rgn);
        Canvas->Draw(0, 0, Bitmap1);
        DeleteObject(rgn);
        for (int j = 0; j < 10000; j++);
    }
}

現代化改良建議

  • 使用 TThread 或 TTimer 替代忙碌等待延遲
  • 改用 Direct2D / FireMonkey GPU 加速渲染
  • 封裝為可複用的 TTransitionEffect 元件
  • 支援 Alpha 混合、縮放、旋轉等仿射變換

歷史價值

展示了 GDI 時代「視窗即畫布」的程式設計思維,對理解 Windows 繪圖架構、雙緩衝、區域裁剪極具教學價值。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved