如何寫一個簡單的 ICON 編輯器 |
尚未結案
|
stree
一般會員 發表:9 回覆:3 積分:2 註冊:2004-08-12 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
stree 您好: 看了您這個問題後,我做了些 "將輸入的文字放大繪製到 Image 物件上" 的測試,大致上是 OK 的,這個測試僅針對您所描述的動作而寫的,因此並不包含圈選區域或是其它的編輯動作在內,我將測試的範例碼貼上來,您參考看看吧。 下列程式碼的測試環境中需要三個元件,請設置 Image、Edit、Button 元件各一於 Form 上,然後將下列的處理程序複製到 Button 元件的 OnClick 事件中 (請將相關的元件名稱改成您設置元件的名稱),程式碼修改好之後就編譯執行,執行時請直接在 Edit 物件輸入要顯示的字樣,然後點選 Button 即可看到字樣放大的效果:
const ICONSIZE = 16; // 設定圖示高度與寬度尺寸 (通常為 16 或 32) const GRIDSIZE = 20; // 設定圖示放大倍數 (顯示格線的寬度與高度) void __fastcall TForm1::Button3Click(TObject *Sender) { Graphics::TBitmap *tmpBitmap = new Graphics::TBitmap(); AnsiString txt = Edit1->Text; // 取得 Edit1 輸入的文字 (也可用 Memo 或其它物件) // 可以預先透過 FontDialog 來設定 Edit (或其它可存放文字資料的物件) 物件所使用的字型名稱與大小, // 然後再由 Edit 物件的 Font 屬性來設定此處使用到的字型屬性 tmpBitmap->Canvas->Font->Name = Edit1->Font->Name; // 繪製字樣所使用的字型名稱 tmpBitmap->Canvas->Font->Size = Edit1->Font->Size; // 繪製字樣的字型大小 tmpBitmap->Canvas->Font->Color = Edit1->Font->Color; // 繪製字樣的字型顏色 tmpBitmap->Width = tmpBitmap->Canvas->TextWidth(txt); // 取得繪製字樣所需的寬度 tmpBitmap->Height = tmpBitmap->Canvas->TextHeight(txt); // 取得繪製字樣所需的高度 tmpBitmap->Canvas->Brush->Color = Edit1->Color; // 設定字樣使用的底色 // 填塗字樣的底色 tmpBitmap->Canvas->FillRect(Rect(0, 0, tmpBitmap->Width, tmpBitmap->Height)); // 繪製字樣 tmpBitmap->Canvas->TextOut(0, 0, txt); // 重設 Image 物件的尺寸 Image1->Width = ICONSIZE * GRIDSIZE; Image1->Height = ICONSIZE * GRIDSIZE; Image1->Picture->Bitmap->Width = Image1->Width; Image1->Picture->Bitmap->Height = Image1->Height; // 取得字樣的實際尺寸 TRect BmpRect = Rect(0, 0, tmpBitmap->Width, tmpBitmap->Height); // 設定放大後的尺寸 TRect ImgRect = Rect(0, 0, tmpBitmap->Width*GRIDSIZE, tmpBitmap->Height*GRIDSIZE); Image1->Picture->Bitmap->Canvas->Brush->Color = Edit1->Color; // 設定 Image 使用的底色 // 填滿 Image 的底色 Image1->Picture->Bitmap->Canvas->FillRect(Rect(0, 0, Image1->Width, Image1->Height)); // 將文字圖樣放大繪製到 Image 物件上 Image1->Picture->Bitmap->Canvas->CopyRect(ImgRect, tmpBitmap->Canvas, BmpRect); Image1->Picture->Bitmap->Canvas->Pen->Color = clSilver; // 用淺灰色線條繪製格線 // 繪製縱線,間隔 GRIDSIZE 個點 for (int x = 0; x < Image1->Width; x = GRIDSIZE) { Image1->Picture->Bitmap->Canvas->MoveTo(x, 0); Image1->Picture->Bitmap->Canvas->LineTo(x, Image1->Height); } // 繪製橫線,間隔 GRIDSIZE 個點 for(int y = 0; y < Image1->Height; y = GRIDSIZE){ Image1->Picture->Bitmap->Canvas->MoveTo(0, y); Image1->Picture->Bitmap->Canvas->LineTo(Image1->Width, y); } delete tmpBitmap; tmpBitmap = NULL; }7 天天敲鍵盤 v 時時按滑鼠 8 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |