在TImage控件上做畫

                                    在TImage控件上做畫
                                    翻譯:今天能看見山

    TImage類提供了一個Canvas屬性以使你能在image的內容上繪圖。image的改變將會成爲這個image的一部分保存下來。如果你把改變過的image拷貝到剪切板上或者將這個image保存爲文件,你的改變將會完全成爲這個image的一部分。這裏的一小段程序代碼用來在一個image上畫一個箭頭。

  const TPoint Arrow1[] = { {80,105} , {106,66}, {80,87},{94,98}};
  Image1->Canvas->Pen->Color = clBlue;
  Image1->Canvas->Pen->Width = 3;
  Image1->Canvas->MoveTo(Arrow1[0].x,Arrow1[0].y);
  Image1->Canvas->LineTo(Arrow1[1].x,Arrow1[1].y);
  Image1->Canvas->MoveTo(Arrow1[0].x,Arrow1[0].y);
  Image1->Canvas->LineTo(Arrow1[2].x,Arrow1[2].y);
  Image1->Canvas->MoveTo(Arrow1[0].x,Arrow1[0].y);
  Image1->Canvas->LineTo(Arrow1[3].x,Arrow1[3].y);

注意:你只能在TImage控件的picture屬性爲空或者包含一個bitmap類型的圖形的時候利用它的Canvas屬性做畫。如果它包含一個icon或者一個圖元文件,則你不能利用它的Canvas做畫。TIimage的只讀方法GetCanvas證實了這樣做的理由。

// 被轉換成爲C++代碼的函數
TCanvas * TImage::GetCanvas()
{
    Graphics::TBitmap *Bitmap;

    if (Picture->Graphic == NULL)
    {
        Bitmap = new Graphics::TBitmap
        Bitmap->Width  = Width;
        Bitmap->Height = Height;

        // 爲Graphic屬性分配新的位圖. 這個調用
        // TPicture的寫方法SetGraphic. SetGraphic實現位圖的分配,
        // 等同於調用 Picture->Graphic->Assign(Bitmap);
        Picture->Graphic = Bitmap;

        // 刪除臨時位圖指針. 因爲位圖的分配已經結束了,
        // 位圖的內容已經被保存在了Picture->Graphic裏
        delete Bitmap;
    }

    if (/* Picture->Graphic 是一個TBitmap型的對象 */ )
        return Picture->Bitmap->Canvas;
    else
        throw EInvalidOperation( /* 拋出一個異常 */);
}

注意到,如果picture屬性是空的,你在上面的繪畫將建立一個新的Bitmap對象.如果一個位圖已經被裝載了,這時TImage::GetCanvas只是返回這個位圖的Canvas屬性.如果Picture裏的是一個icon或者是一個圖元文件,程序將拋出一個異常。

注意:TImage::GetCanvas工作的結果是,使用Image->Canvas和Image->Picture->Bitmap->Canvas並沒有什麼區別.
注意:Image控件在Canvas上畫的圖象的寬和高和這個位圖的原始尺寸是一樣的. 如果這個放到Image控件中的圖象被拉伸了,則它的寬度和高度有可能同原始尺寸不一樣.例如,在一個新窗體中放置一個Image控件.調整窗體尺寸爲500x400象素.設置Image控件的對齊屬性爲alClient,並且裝載上CHEMICAL.BMP這個BCB中自帶的圖片. 最後,將Stretch改爲true以保證圖片充滿這個窗體.此時,Image1->Width將跟Form1->ClientWidth相等,但是Image1->Picture->Width 將是CHEMICAL.BMP的寬度(240).
注意:當你在一個image上做畫的時候,儘量使用Windows標準顏色或者是已經存在於調色板中的顏色.
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章