在Delphi中實現圖片的旋轉、縮放 (轉)
好長時間沒有寫東西了,並不是因為前面的東西遭受了很多蕃茄和雞蛋,而是自己實在沒有什麼真實的東西寫出來供大家參考。但是最近在幫一個朋友做一個專案的時候,遇到了在中對影像的簡單處理,於是不停的從網上找資料,翻看csdn以前的帖子,從我搜尋的結果發現很多人會在各種專案中遇到類似的圖片處理問題,但是多數得到的答案似乎並不完整(因為很多都沒有結帖,也可能是個人習慣的問題,呵呵,希望大家讀了我這個文章之後,能夠家開結帖速度)。於是我把我遇到的問題和解決方案寫在下面,供大家參考,同時歡迎大家繼續拍磚。
在正式內容之前要把我要解決的問題寫在前面,同時也讓讀者有一個好的定位,從而不會因為我在處理過程中的拙劣手段而感到惱火。這裡主要解決的問題是在Delphi中將用掃描器掃描得到的圖片進行90度旋轉,從而得到適合使用的圖片,並且由於不能正確把握圖片的大小,因此要對圖片進行簡單的縮放。而我的解決方法也完全是根據此要求進行,因為對於、圖片處理之後的清晰度考慮的不是很多,同時帶來的好處就是看起來很簡單。
首先,我沒有掃描器,因此我不知道使用掃描程式(已經提供)得到的圖片是什麼格式,而在Delphi的幫助中說“A bitmap is a powerful graphics used to create, manipulate (scale, scroll, rotate, and paint), and store images in memory and as files on a disk”,所以我的第一步就是要把我的片轉化為TBitmap來處理。在轉化格式的同時,我將圖片的實際大小改變,以適合後面選取部分影像的需要。如下:
procedure TMainForm.ChangeImageFormate;
var Bitmap : TBitmap;
Zoom : Integer;
begin
Bitmap := TBitmap.Create; //1
try
with ImageCert do begin
Bitmap.Assign(Picture.Graphic); //2
Picture := nil; //3
Zoom := Max(Bitmap.Width div Width,Bitmap.Height div Height)+1; //4
Width := Bitmap.Width div Zoom; //5
Height := Bitmap.Height div Zoom; //6
Canvas.StretchDraw(Rect(0,0,Width,Height),Bitmap); //7
end;
finally
Bitmap.Free;
end;
end;
我想這段程式碼並不是很複雜,ImageCert是一個TImage放在Form上,唯一可能陌生的就是第八句,但是大家可以從Delphi的幫助中得到很到說明,我在這就不再翻譯了(我的建議就是多看幫助)。同時應該指出的是第三句作用是很關鍵的,如果去掉這一句同時你的圖片格式不是bmp的話,就會出現“只有bitmap才能才能修改”的錯誤。
第二步就是實現圖片的旋轉,因為程式要求只是每次旋轉90度即可,因此這裡也比較容易處理。處理的手段就是按照畫素進行替換。實現過程如下:
procedure TMainForm.RotateImage;
var x,y : Integer;
TmpBitMap : TBitmap;
begin
TmpBitMap := TBitmap.Create;
try
TmpBitMap.Assign(ImageCert.Picture.Graphic);
with ImageCert do begin
Picture.Bitmap.Height := TmpBitMap.Width;
Picture.Bitmap.Width := TmpBitMap.Height;
for x:=0 to Height do
for y:=0 to Width do
Canvas.Pixels[TmpBitMap.Height-x,y] := TmpBitMap.Canvas.Pixels[y,x];
Height := TmpBitMap.Width;
Width := TmpBitMap.Height;
end;
finally
TmpBitMap.Free;
end;
end;
這段程式也沒有什麼好講的,但是幾個高度和寬度的設定令我是分的煩悶,總是覺得多做的點什麼,但是卻偏偏去不掉任何一行,如果哪位有興趣可以嘗試一下,最好把結果也告訴我一聲。而且在這個裡面由於TImage和TBitmap都有各自的canvas,所以使用哪一個可能也是值得研究的,但是由於時間有限就沒有在嘗試了。
至於在部分取圖的過程中,我是用了一個TShape,然後用將brush的style設定成bsclear,在ImageCert的onMouseMove中安排這個TShap的位置,這樣做不是很靈敏,因為當滑鼠在TShape上面時則不會起到作用,所幸影響不大。同時我在TShape的OnMouseDown事件中取出TShape下面的部分圖片。這個時候如果你的圖片沒有做過縮放處理,就會發現取出的圖片和我們看到的位置不相符(當然是在TImage沒有正確顯示圖片大小的情況下)。
可以肯定這個方法不是很好的方法,但是至少它解決了問題。
囉裡囉唆,不知所謂。
版權所有:idilent 網站轉載請註明作者 其他轉載方式請與作者聯絡(to:idilent@.com.cn">idilent@yahoo.com.cn)。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-963682/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android 中實現圖片平移、縮放、旋轉同步進行Android
- 在DELPHI中圖片轉換
- php實現圖片旋轉PHP
- ARFoundation - 實現物體旋轉, 平移,縮放
- JavaScript實現手機拍攝圖片的旋轉、壓縮JavaScript
- 開源圖片工具箱(Img Toolbox) 格式轉換 新增水印 圖片壓縮 圖片裁剪 圖片旋轉 圖片縮放
- 實現圖片縮放
- html中圖片旋轉HTML
- 使用RxJava實現ImageView的拖動、旋轉和縮放RxJavaView
- imageView圖片放大縮小及旋轉View
- 如何實現圖片的3D旋轉,而且是不停旋轉?3D
- 純CSS無表示式實現圖片等比縮放(轉載)CSS
- ffmpeg-圖片壓縮旋轉等處理
- 用html5實現圖片的旋轉--照片牆HTML
- Android 可平移,縮放,旋轉的ImageViewAndroidView
- QT 自定義QGraphicsItem 縮放後旋轉 圖形出現漂移問題QT
- 滑鼠懸浮div實現旋轉縮放效果程式碼例項
- 將圖片旋轉(這裡不是旋轉imageView)View
- 怎麼旋轉圖片?BenVista PhotoZoom Pro旋轉圖片的方法OOM
- 滑鼠懸浮圖片實現縮放效果
- JS實現等比例縮放圖片JS
- 在Delphi中實現任意形狀的窗體 (轉)
- javascript仿新浪微博圖片放大縮小及旋轉效果JavaScript
- canvas實現的圖片縮放程式碼例項Canvas
- 移動端圖片上傳旋轉、壓縮的解決方案
- | / - 的旋轉效果實現(轉)
- QLabel顯示圖片 ,並實現縮放
- 利用javascript實現圖片等比例縮放JavaScript
- 【Go語言繪圖】圖片的旋轉Go繪圖
- Delphi中停靠技術的實現 (轉)
- 圖片操作系列 —(2)手勢旋轉圖片
- 23.Quick QML-簡單且好看的圖片瀏覽器-支援多個圖片瀏覽、縮放、旋轉、滑輪切換圖片UI瀏覽器
- CSS3 滑鼠懸浮div旋轉縮放CSSS3
- iOS感測器:實現一個隨螢幕旋轉的圖片iOS
- canvas實現的旋轉太極圖效果Canvas
- CSS3圖片旋轉效果CSSS3
- jQuery圖片放大和旋轉效果jQuery
- Flutter 圖片裁剪旋轉翻轉編輯器Flutter