新聞| | PChome| 登入
2007-10-25 23:39:15 | 人氣143| 回應0 | 上一篇 | 下一篇
推薦 0 收藏 0 轉貼0 訂閱站台

圖形放大/修改後的存檔

來源:cww

VB中圖存檔使用 SavePicture 指令,而它的參數是
   picture	      產生圖形檔案的 PictureBox 控制項或 Image 控制項。
   stringexpression   儲存的圖形檔案名稱

而我的作法是:在PictureBox的Image屬性上作動作,因為PictureBox上的Picture經設
定後,它就固定下來,我們在其上的繪圖等動作,基本上沒有動到Picture屬性所指的圖
,而想改變到圖,就只能從Image上著手。所以了,一定得設定PictureBox的AutoRedraw
為True,這才會使繪圖的動作在Image上發生,最後再使用SavePicture的指令,傳Image
當第一個參數來存檔。這裡有另一個重要的問題,如果PictureBox的大小是100*100,
而實際進來的圖是50*50,那麼,PictureBox.Image其大小範圍仍是100*100,因而我一開
始設定PictureBox的長寬各為1,等後來圖放大後,PictureBox Image的大小也隨之變大。
也正因我們使用的是PictureBox的Image物件,所以存檔的結果只能是Bitmap圖,這點要
特別注意。

'需一個PictureBox, 一個Command button
Option Explicit
Dim pic As New StdPicture
Private Sub Command1_Click()
Set pic = LoadPicture("e:\girl.bmp") '請輸入想放大/縮小的圖
Call setScope(pic, 0.5, 0.5, Picture1) '縮小0.5倍,將之放入Picture1
SavePicture Picture1.Image, "e:\t2.bmp"  '存檔
Picture1.Visible = True
End Sub


Private Sub Form_Load()
Me.ScaleMode = 3
Picture1.AutoRedraw = True
Picture1.ScaleMode = 3

Picture1.BorderStyle = 0
Picture1.Visible = False

Picture1.Width = 1 '設定PictureBox為最小
Picture1.Height = 1

End Sub

Private Sub setScope(pic As StdPicture, ByVal xRate As Double, _
		ByVal yRate As Double, pic2 As PictureBox)
 Dim dstWidth As Long, dstHeight As Long
 Dim srcWidth As Long, srcHeight As Long
 Dim x As Long, y As Long
 Dim i As Long

 srcHeight = pic2.ScaleY(pic.Height, vbHimetric, vbPixels)
 srcWidth = pic2.ScaleX(pic.Width, vbHimetric, vbPixels)

 dstHeight = CLng(srcHeight * yRate)
 If dstHeight < 0 Then
    y = -1 * dstHeight
 Else
    y = 0
 End If
 dstWidth = CLng(srcWidth * xRate)
 If dstWidth < 0 Then
    x = -1 * dstWidth
 Else
    x = 0
 End If
 pic2.Width = Abs(dstWidth) '改變PictureBox的大小
 pic2.Height = Abs(dstHeight)
 pic2.PaintPicture pic, x, y, dstWidth, dstHeight, 0, 0, srcWidth, srcHeight

End Sub

台長: Kenny

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文