A. jip和gip有什麼不一樣
JPEG是Joint Photographic Experts Group(聯合圖像專家組)的縮寫,文件後輟名為".jpg"或".jpeg",是最常用的圖像文件格式,由一個軟體開發聯合會組織制定,是一種有損壓縮格式,能夠將圖像壓縮在很小的儲存空間,圖像中重復或不重要的資料會被丟失,因此容易造成圖像數據的損傷。尤其是使用過高的壓縮比例,將使最終解壓縮後恢復的圖像質量明顯降低,如果追求高品質圖像,不宜採用過高壓縮比例。但是JPEG壓縮技術十分先進,它用有損壓縮方式去除冗餘的圖像數據,在獲得極高的壓縮率的同時能展現十分豐富生動的圖像,換句話說,就是可以用最少的磁碟空間得到較好的圖像品質。而且 JPEG是一種很靈活的格式,具有調節圖像質量的功能,允許用不同的壓縮比例對文件進行壓縮,支持多種壓縮級別,壓縮比率通常在10:1到40:1之間,壓縮比越大,品質就越低;相反地,壓縮比越小,品質就越好。比如可以把1.37Mb的BMP點陣圖文件壓縮至20.3KB。當然也可以在圖像質量和文件尺寸之間找到平衡點。JPEG格式壓縮的主要是高頻信息,對色彩的信息保留較好,適合應用於互聯網,可減少圖像的傳輸時間,可以支持24bit真彩色,也普遍應用於需要連續色調的圖像。
JPEG格式是目前網路上最流行的圖像格式,是可以把文件壓縮到最小的格式,在 Photoshop軟體中以JPEG格式儲存時,提供11級壓縮級別,以0—10級表示。其中0級壓縮比最高,圖像品質最差。即使採用細節幾乎無損的10 級質量保存時,壓縮比也可達 5:1。以BMP格式保存時得到4.28MB圖像文件,在採用JPG格式保存時,其文件僅為178KB,壓縮比達到24:1。經過多次比較,採用第8級壓縮為存儲空間與圖像質量兼得的最佳比例。
JPEG格式的應用非常廣泛,特別是在網路和光碟讀物上,都能找到它的身影。目前各類瀏覽器均支持JPEG這種圖像格式,因為JPEG格式的文件尺寸較小,下載速度快。
JPEG2000作為JPEG的升級版,其壓縮率比JPEG高約30%左右,同時支持有損和無損壓縮。JPEG2000格式有一個極其重要的特徵在於它能實現漸進傳輸,即先傳輸圖像的輪廓,然後逐步傳輸數據,不斷提高圖像質量,讓圖像由朦朧到清晰顯示。此外,JPEG2000還支持所謂的"感興趣區域" 特性,可以任意指定影像上感興趣區域的壓縮質量,還可以選擇指定的部分先解壓縮。
JPEG2000和JPEG相比優勢明顯,且向下兼容,因此可取代傳統的JPEG格式。JPEG2000即可應用於傳統的JPEG市場,如掃描儀、數碼相機等,又可應用於新興領域,如網路傳輸、無線通訊等等。
2、GIF圖象文件格式
GIF的全稱是Graphics Interchange Format,.譯做圖形交換格式。GIF是一種公用的圖象文件格式標准,但它歸compuServe公司版權所有。
GIF文件結構包含一個文件頭,
在一個GIF文件中首先碰到的是GIF的標志,這個標志告訴解碼程序這是個GIF文件。這個標志是3位元組的串:GIF。一個GIF文件中可以存放多幅圖象,但絕大多數的文件都只包含一幅圖象。
然後是屏幕描述字(screen descriptor),說明了用來生成的顯示文件中的圖象的顯示器解析度,分別表示屏幕的寬和高。
緊跟下來的一個位元組是全局標志,其低三位說明了即將碰到的圖象是多少顏色的。最高位表示是否存在一個全局色彩表。
背景色表示把背景置成適當的顏色,實際上是一個指向全局色彩表的數。
Struct Global_Data{
Unsigned short screen_width;
Unsigned short screen_height;
Unsigned char background;
har tail='\0';
}
接下來是全局色彩表,按順序存放所有的嚴肅,每一種嚴肅由色彩表的一項來描述,每項是3位元組,分別表示紅、綠、藍三種原色的強度。其長度有全局標志的低三位表示。
以後的數據都是局部的了。是些數據塊的集合。下面是圖象數據塊的結構。
Struct Local_Head{
Char heading=',';
Unsigned short image_left;//圖象的屏幕上顯示的起始位置
Unsigned short image_top;
Unsigned short image_width;
Unsigned short image-height;
Unsigned char local_flag;//局部標志
}
局部標志和 全局標志的不同之處在於次高位,如果這位被置成1則表示圖像的點陣圖數據是以隔行方式存放的。也就是說,在解開的點陣圖數據中,第一行存放的是屏幕上第一行,第二行對應屏幕上的第9行,第三行對應屏幕上的第17行,以此遞增--這是第一遍掃描;第二遍掃描是從屏幕上的第5行開始,兩行之間也是以8遞增;第三遍掃描是從屏幕上的第3行開始,兩行之間以4遞增;第四遍掃描,也是最後一遍,從第2行開始,兩行之間以2遞增。隔行存放的圖像數據和順序(不隔行)存放的圖像數據的對應關系如下圖所示:
隔行存放的GIF圖像在邊解碼邊顯示的時候可分成四遍掃描。第一遍掃描雖然只顯示了整個圖像的八分之一,第二遍的掃描後也只顯示了四分之一,但這已經把整個圖像的概貌顯示出來了。在顯示GIF圖像的時,隔行存放的圖像會給你這樣一個印象:向它的顯示速度似乎要比其他圖像快一些,這是隔行存放的優點。
在GIF圖像的編解碼中用到了LZW壓縮演算法--把這些字元流轉換成另一種形式的代碼流,解碼過程則是把這種代碼流還原成原來的字元流。
B. 如何縮小照片kb大小
1、打開圖片
首先用ps軟體打開需要調整大小的圖片。
C. 微信小程序圖片壓縮
微信小程序圖片壓縮有三種方法,一種是使用官方提供的介面 wx.compressImage(Object object) ;一種是通過壓縮圖片的大小,利用canvas重繪來得到壓縮圖片;最後一種安裝第三方圖片壓縮包。
由於第一種方法網上很多人說壓縮不明顯或者失效,所以選擇使用canvas重繪來實現圖片壓縮。同時,該種方法可以控制圖片的最大尺寸,保持上傳圖片大小尺寸相差不多。在我們的學生節晚會小程序中,屏幕顯示圖片會比較美觀一致。
1. 通過 wx.chooseImage 介面選擇相機圖片
2. 通過 wx.getImageInfo 介面獲取圖片信息(長寬,類型)
3. 計算壓縮比例和最終圖片的長寬
5. 通過 wx.canvasToTempFilePath 介面將畫布內容導出為圖片並獲取圖片路徑
wxml 文件
在文件末尾插入 canvas 組件,通過設置left和top值確保圖片不會顯示在可視范圍內。
一定要設置 canvas-id,這是canvas繪圖和導出圖片必備的屬性。
js 文件
設置與頁面綁定的數據:canvas的大小,也是壓縮後圖片的大小
1. 將畫布內容導出為圖片時,指定destWidth和destHeight為壓縮後圖片的大小。這里遇到過玄學bug,不指定的話,有時候圖片不會壓縮到規定的大小。
D. 圖片加了z-index屬性後尺寸變了
安裝好ACD6.0後,點一副圖片,系統會自動調用ACD將其打開,點窗口上方菜單欄中的「修改」、「轉換文件格式」,在「格式」中選擇自己想要的格式吧,點下一步,按照提示即可,很容易的。 另外。在「格式設置」里,可以調整壓縮率,這一點非常重要,能在基本不改變照片畫質的情況下,把照片體積壓縮的很小。我試過,將一張大小為1M的JPG格式照片,採用最大壓縮率進行壓縮後,畫質不變,大小僅為280KB,格式還是JPG,是不是很爽。 建議使用4.0以上版本的ACD。雖然PHOTOSHOP也能實現此功能,但此軟體體積非常大,啟動慢,不過它是專業的圖象處理軟體,要用好,不容易。可能有人會問?那麼開始、程序、附件下的畫圖程序不也行嗎?回答是:不行!畫圖只能將BMP格式壓縮成JPG,本來就是JPG的,它就沒辦法了。 您還可以下載一款專用的圖像瘦身工具,叫JPEG Imager ,在網上可以很容易的搜索到。此軟體能將 BMP、JPG、PNG、GIF 等圖形文件壓縮,使文件變的更小,可自設壓縮比例、大小、明暗度等等,它採用了一種新壓縮演算法:「智能過濾(smart filtration)」不僅可以改善圖像的觀感質量,而且還可為輸出的圖片「減肥」,允許壓縮後的圖形文件不失真。還可以建立類似於漸變 GIF 效果的漸變式 JPEG 圖像,這種形式的 JPEG 圖像應用於網頁製作可使網頁讀取的速度加快。它的特點還包括對圖像進行批量處理高效建立縮略圖以及利用自帶的濾鏡、圖像編輯器對圖形進行簡單的處理等。
E. 怎樣高倍率的壓縮照片文件
我是不贊成改變圖片的壓縮率來保存圖片的。因為這樣會造成圖片的質量降低,圖片就沒有原件清晰了。 ~~~~~~~~~~~~~~~~~~ 可以採用分卷壓縮的方法: 把你的照片,全部放到一個文件夾里,然後壓縮,分卷壓縮。一般郵件可以發送的附件大小約10M,(看你用的什麼郵件)。在「壓縮分卷大小」一項中填寫,比如「5M」(我是建議分割小一點,在郵件中比較容易發送成功。) 這樣就得到幾個體積為5M的壓縮包,分別通過郵件發送給對方。對方收齊了這些壓縮包,解壓就可以得到文件了。 我經常用此方法把視頻文件分成幾部分發送給網友,對方收到後解壓就得到一個完整的視頻文件。 ~~~~~~~~~~~~~~~~~~ 可以做一個博客,把你的相冊全部放到上面去,這樣別人就可以看到了。 可以申請一個網路相冊,比如網易相冊,雅虎相冊等,,,據說是不限制容量的,你有多少照片都可以上傳的。對於私密的照片,可以設置密碼,對方知道密碼才可以訪問。 對於可以公開的照片,可以開放供人欣賞…… 可以上傳到愛問共享資料里去。(當然只適合可以公開的照片)愛問共享資料,可以單次上傳30M文件。 可以把這些照片,做成一個視頻相冊,上傳到愛問視頻,或者新浪播客里去…… (相關的製作軟體很多,我原先「班沙克」那個號上傳了很多這樣的軟體的。http://iask.sina.com.cn/toplist/answer_list.php?uid=80888570 )
F. 有哪些電腦軟體是大學生必備的
1、Chrome瀏覽器
這款瀏覽器我自己用的比較多,除了裝機自帶的瀏覽器之外,我又另外安裝的它,平時查東西打開的網頁多也不會卡斷,最主要的是它沒有亂七八糟廣告彈窗,使用起來簡潔舒適,實用性很強。
2、火絨安全
這是一款殺毒軟體,很久之前就聽說過,我也是最近才安裝的,它的口碑非常好。可以清理病毒、關閉廣告彈窗,而且體積非常小,輕便無存在感,有人稱之為「殺毒工具中的一股清流」,問十個人有八個人推薦它。
3、PS
大家或多或少都聽說過PS這個軟體,我們經常說的P圖就是用這款工具比較多,雖然算不上什麼必備工具,但是學會這個技能還是非常加分的,網上也有非常多的教程。大學的可自由安排時間比較多,學一門實用的軟體絕對沒錯!
4、Gitmind
這是一個思維導圖APP,平常記筆記,整理資料或者閱讀的時候都會用到它,不管是工作還是學習都要有規劃,這里有很多的模板可以使用,讀書筆記、工作計劃這些都有,製作思維導圖非常方便好用。
5、Listen1
這是一款音樂播放神器,可以進行全平台的音樂搜索播放,比如網易雲、蝦米音樂、酷狗音樂、酷我音樂等網站的歌曲,許多下架或者收費的歌曲都可以在這里免費收聽,非常Nice!
今天的實用性電腦軟體分享就到這里啦,你們有什麼需求或者想要分享的工具可以私信我,或者在評論區留言哦!
G. 我做了一個大小574k的程序 內存卻佔用了20多M,該怎樣進行內存優化
一.代碼優化
內存會溢出肯定和代碼逃不了關系,99.99%學java的人都知道垃圾回收器是java的一大優點並據此來嘲笑C++。顯然這個特性為代碼編寫者省了不少事,但這個特性卻帶來了不少隱患。舉個例子在游戲當中經常有不同場景的切換,如從游戲邏輯退到主菜單邏輯,對游戲邏輯對象的態度很多人會選擇忘記等待垃圾回收器來收屍。乍看之下似乎並無不妥垃圾回收器會來善後。實際上垃圾回收器並非實時的,它不像C++的Delete語句馬上釋放不用的內存。當從游戲邏輯切換到主菜單邏輯這時兩個對象同時存在很可能這時內存就不夠用了。讀到這里很多人會發現實際上垃圾回收器在j2me上並不怎麼好用,從一個角度上來講在j2me上所有垃圾必須由手工釋放,除簡單類型以外所有對象都必須顯式地置空例如imgs=null;實際上java提供了一個不錯的工具用來查找內存溢出,java.lang.Runtime.freeMemory()。它可以返回當前的剩餘內存數,將它適當的安放在代碼中可以有效的監測內存使用狀況。很大一部份的j2me程序員之前都是從事pc軟體開發工作,充裕的內存掩蓋了許多寫代碼的不良習慣。如下所示:
//a不為空
a=newLogic();
很多人可能對此有異議,他們會認為新的對象會把舊的對象沖掉並且釋放內存。這裡麵包含兩個問題:1.該段代碼是先創建對象然後再進行賦值操作的,也就是說在這期間有兩個對象同時存在這就很可能會產生溢出。2.這樣做也會妨礙垃圾回收器的工作
較好的寫法如下:
a=null;
a=newLogic();
雖然麻煩了點但在j2me中還是必要的。接著看下例。
drawString("游戲時間:"+time,50,50,Graphics.LEFT|Graphics.TOP);
"游戲時間:"+time很完美在paint()方法當中每次都被刷一遍顯示在屏幕上。危機往往隱藏在美麗的外表,該語句會引起新的內存重新分配來存儲"游戲時間:"+time而顯示完以後又必須由垃圾回收器釋放,用了雙倍時間,並且容易發生內存溢出。依此類推在重復執行的方法里應盡量避免重復定義對象。與paint()方法類似在循環里也有類似的情況存在。
把所有對象的初始化放在構造函數里想必是再正當不過了,大多數人通常的做法是把當前邏輯所要用到的資源通通初始化完畢。
很大一部份的內存溢出都是發生在構造函數中。內存使用的高峰期都是在構造函數中所以避開這個高峰能有效的防止溢出。建議最好的辦法是第一次使用時初始化。如下所示
if(img==null){
//初始化
}
現在做游戲很多時候都需要地圖數組,聲音數組,還有一些其它資源這些資源很多可以放在代碼中也有的可以放在文件當中。
強烈建議將這些資源放在文件中需要時在load進來。這些資源文件如果放在代碼中則會佔用不小的代碼段空間,而代碼一般是程序一運行就裝載到內存當中。
除上面列舉的方法外還有一些大家所熟知的順便一提,比如關閉沒用的rms,關閉沒用的網路連接,關閉沒用的流。正確地停止線程。良好的程序架構減少代碼偶合性也是一個不錯的方法,無論在代碼調式,內存釋放都可以做到非常清析。
二.圖片優化
j2me的內存殺手無疑非圖片莫屬,一張3k的圖片可以佔用20多k的內存不信大家把load前後的內存剩餘列印出來對比看看。所以防止內存溢出最直接的辦法就是從圖片入手。
1.圖片壓縮:多數人馬上會想到這個辦法。不錯這個辦法是最有效的。在photoshop里圖片製作完成後不要選擇"存儲為",而是選擇"存儲為web所用格式"可以根據裡面的選項進行壓縮,特別是顏色這一項越小越好不過相應的圖像會有所失真。不要認為這樣就完了。
實際上該圖片還可以再次壓縮,在網上有許多類似的工具。推薦一款可以壓縮png格式的軟體xat.comImageOptimizer效果不錯。經常都有70%的壓縮率且圖像不會失真。
假如你有多張規格一樣的圖片,那麼建議你把它做成一張長條圖片。有兩個原因:
1、這樣節省存儲空間和內存空間。大家可做個試驗將10張圖片的內容放在一張當中對比看看文件大小有沒有變化。
2、10張圖片需要10個image對象需要進行10次io操作浪費時間不說還浪費內存。當筆者發現這個好處時興奮地把所有圖片都存成一張,吱地一聲內存又溢出了...原因想必大家也知道!!圖片太大了不要把不同界面的圖片整合在一起否則經常會得不償失。
作圖時還有一些細節需要注意,顏色數量,分辯率,圖像模式(最好是索引顏色),畫布大小都會影響到圖片大小。
三.工具優化
誰都知道混淆器是用來保護代碼的以加大反編譯的難度(個人認為這是在嘲笑程序員的智商)。實際上用它來優化程序也是不錯的選擇,至少有兩點好處:
1、壓縮程序大小。一個60k的程序經常可以壓掉10k左右。10k的空間對於寫低端手機的程序員簡直是雪中送碳,多少超過64k限制的游戲都受過它的恩惠;
2、節省內存空間。用腳去想也想得出來代碼少了內存里的代碼段自然就短了。
H. 上傳圖片時文件過大怎麼辦
可以使用photoshop軟體將圖片的品質調低,就可以將圖片文件大小變小。具體的設置方法如下:
一、打開photoshop軟體界面,點擊左上角的文件選擇打開按鈕。
I. 怎麼用JavaScript在線壓縮圖片
主要用了兩個html5的 API,一個file,一個canvas,壓縮主要使用cnavas做的,file是讀取文件,之後把壓縮好的照片放入內存,最後內存轉入表單下img.src,隨著表單提交。
照片是自己用單反拍的,5M多,壓縮下面3張分別是600多kb,400多kb,300kb的最後那張失真度很大了,壓縮效率蠻高的。
<!DOCTYPE html>
<html><head> <meta charset="utf-8"/> <title>File API Test</title> <script type="text/javascript" src="js/jquery-1.11.0.min.js"></script> <script type="text/javascript" src="js/JIC.js"></script> <style> #test{ display: none; } </style></head><body><input type="file" id="fileImg" ><form> <img src="" id="test" alt=""></form><script> function handleFileSelect (evt) { // var filebtn = document.getElementById(id); // console.log(filebtn); // var files = filebtn.target.files; // console.log(filebtn.target); // console.log(files); var files = evt.target.files; for (var i = 0, f; f = files[i]; i++) { // Only process image files. if (!f.type.match('image.*')) { continue; } var reader = new FileReader(); // Closure to capture the file information. reader.onload = (function(theFile) { return function(e) { // Render thumbnail. // console.log(evt.target.files[0]); // console.log(e.target); console.log(e.target.result); var i = document.getElementById("test"); i.src = event.target.result; console.log($(i).width()); console.log($(i).height()); $(i).css('width',$(i).width()/10+'px'); //$(i).css('height',$(i).height()/10+'px'); console.log($(i).width()); console.log($(i).height()); var quality = 50; i.src = jic.compress(i,quality).src; console.log(i.src); i.style.display = "block"; }; })(f); // Read in the image file as a data URL. reader.readAsDataURL(f); } } document.getElementById('fileImg').addEventListener('change', handleFileSelect, false);</script></body></html>
var jic = { /** * Receives an Image Object (can be JPG OR PNG) and returns a new Image Object compressed * @param {Image} source_img_obj The source Image Object * @param {Integer} quality The output quality of Image Object * @return {Image} result_image_obj The compressed Image Object */ compress: function(source_img_obj, quality, output_format){ var mime_type = "image/jpeg"; if(output_format!=undefined && output_format=="png"){ mime_type = "image/png"; } var cvs = document.createElement('canvas'); //naturalWidth真實圖片的寬度 cvs.width = source_img_obj.naturalWidth; cvs.height = source_img_obj.naturalHeight; var ctx = cvs.getContext("2d").drawImage(source_img_obj, 0, 0); var newImageData = cvs.toDataURL(mime_type, quality/100); var result_image_obj = new Image(); result_image_obj.src = newImageData; return result_image_obj; }, function ****(***)
J. 我想用VB寫一個壓縮圖片的程序,應該怎麼寫
如果你是僅僅為了壓縮,而不是為了編程,你可以用ACDSee,他可以批量操作,方法是在ACDSee中選擇你需要壓縮的全部文件,點 工具 調整大小 選項很明顯,你試一試。
你非要用程序的話,看看一下參考
注意:
PicClipD的ScaleMode=vbPixels
源圖像是ImgSrc
目的圖像是PicDest,注意它的屬性
最關鍵的實現過程在CmdMake_Click
將下列內容復制到記事本,並保存為相應的文件
PicScale.vbp
--------------------
Type=Exe
Form=FrmMain.frm
Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\..\..\WINDOWS\system32\stdole2.tlb#OLE Automation
Object={F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0; COMDLG32.OCX
IconForm="FrmMain"
Startup="FrmMain"
HelpFile=""
ExeName32="PicScale.exe" "
Command32="" "
Name="PicScale"
HelpContextID="0"
CompatibleMode="0"
MajorVer=1
MinorVer=0
RevisionVer=0
AutoIncrementVer=0
ServerSupportFiles=0
CompilationType=0
OptimizationType=0
FavorPentiumPro(tm)=0
CodeViewDebugInfo=0
NoAliasing=0
BoundsCheck=0
OverflowCheck=0
FlPointCheck=0
FDIVCheck=0
UnroundedFP=0
StartMode=0
Unattended=0
Retained=0
ThreadPerObject=0
MaxNumberOfThreads=1
[MS Transaction Server]
AutoRefresh=1
FrmMain.frm
----------------------------------
VERSION 5.00
Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "COMDLG32.OCX"
Begin VB.Form FrmMain
Caption = "簡單圖像文件縮放"
ClientHeight = 3810
ClientLeft = 165
ClientTop = 855
ClientWidth = 5505
HasDC = 0 'False
LinkTopic = "Form1"
ScaleHeight = 254
ScaleMode = 3 'Pixel
ScaleWidth = 367
StartUpPosition = 3 '窗口預設
Begin MSComDlg.CommonDialog CDlgFile
Left = 2160
Top = 1320
_ExtentX = 847
_ExtentY = 847
_Version = 393216
End
Begin VB.PictureBox PicClipD
BackColor = &H8000000C&
HasDC = 0 'False
Height = 1695
Left = 2520
ScaleHeight = 109
ScaleMode = 3 'Pixel
ScaleWidth = 117
TabIndex = 8
TabStop = 0 'False
Top = 840
Width = 1815
Begin VB.PictureBox PicDest
AutoRedraw = -1 'True
BackColor = &H00FFFFFF&
BorderStyle = 0 'None
Height = 495
Left = 240
ScaleHeight = 33
ScaleMode = 3 'Pixel
ScaleWidth = 65
TabIndex = 9
TabStop = 0 'False
Top = 360
Width = 975
End
End
Begin VB.PictureBox PicClipS
BackColor = &H8000000C&
HasDC = 0 'False
Height = 1575
Left = 360
ScaleHeight = 101
ScaleMode = 3 'Pixel
ScaleWidth = 101
TabIndex = 7
TabStop = 0 'False
Top = 840
Width = 1575
Begin VB.Image ImgSrc
Height = 855
Left = 240
Top = 240
Width = 855
End
End
Begin VB.PictureBox PicToolBar
Align = 1 'Align Top
HasDC = 0 'False
Height = 495
Left = 0
ScaleHeight = 29
ScaleMode = 3 'Pixel
ScaleWidth = 363
TabIndex = 0
TabStop = 0 'False
Top = 0
Width = 5505
Begin VB.CommandButton CmdReset
Caption = "復位"
Height = 255
Left = 3960
TabIndex = 6
Top = 120
Width = 780
End
Begin VB.CommandButton CmdMake
Caption = "生成"
Height = 255
Left = 3120
TabIndex = 5
Top = 120
Width = 780
End
Begin VB.TextBox TxtHeight
Height = 270
Left = 2280
TabIndex = 4
Text = "Text1"
Top = 120
Width = 750
End
Begin VB.TextBox TxtWidth
Height = 270
Left = 720
TabIndex = 2
Text = "Text1"
Top = 120
Width = 750
End
Begin VB.Label LblHeight
AutoSize = -1 'True
Caption = "Height:"
Height = 180
Left = 1680
TabIndex = 3
Top = 120
Width = 630
End
Begin VB.Label LblWidth
AutoSize = -1 'True
Caption = "&Width:"
Height = 180
Left = 120
TabIndex = 1
Top = 120
Width = 540
End
End
Begin VB.Menu mnuFile
Caption = "文件(&F)"
Begin VB.Menu mnuOpen
Caption = "打開(&O)..."
End
Begin VB.Menu mnuSave
Caption = "保存(&S)..."
End
Begin VB.Menu mnuSep0_0
Caption = "-"
End
Begin VB.Menu mnuExit
Caption = "退出(&X)"
End
End
End
Attribute VB_Name = "FrmMain"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Private Const CtlSpace = 4 '控制項之間的距離
Private Sub CmdMake_Click()
Dim nWidth As Long
Dim nHeight As Long
'得到數值
On Error GoTo ErrNum
nWidth = CLng(TxtWidth.Text)
nHeight = CLng(TxtHeight.Text)
On Error GoTo 0
If nWidth < 1 Or nHeight < 1 Then GoTo ErrNum
'改變大小
On Error GoTo ErrSetSize
PicDest.Move 0, 0, nWidth, nHeight
On Error GoTo 0
'取消PictureBox的緩存
Set PicDest.Picture = Nothing
'繪制圖像
PicDest.PaintPicture ImgSrc, 0, 0, PicDest.ScaleWidth, PicDest.ScaleHeight
Exit Sub
ErrNum:
MsgBox "錯誤的數值!", vbCritical
Exit Sub
ErrSetSize:
MsgBox "無法創建這么大的圖片!", vbCritical
Exit Sub
End Sub
Private Sub CmdReset_Click()
If ImgSrc.Picture.Type = vbPicTypeNone Then '無圖片
TxtWidth.Text = CStr(1)
TxtHeight.Text = CStr(1)
CmdMake.Enabled = False
Else
TxtWidth.Text = CStr(ImgSrc.Width)
TxtHeight.Text = CStr(ImgSrc.Height)
CmdMake.Enabled = True
Call CmdMake_Click
End If
End Sub
Private Sub Form_Load()
'-- 初始化坐標定位
Dim SM_Me As Long
Dim SM_Tbr As Long
Dim nTemp As Long
SM_Me = Me.ScaleMode
SM_Tbr = PicToolBar.ScaleMode
'定位PicToolBar的高度
With PicToolBar
'計算邊框大小
nTemp = Me.ScaleY(.Height, SM_Me, vbPixels) - .ScaleY(.ScaleHeight, SM_Tbr, vbPixels)
'計算PicToolBar應有高度
nTemp = nTemp + .ScaleY(TxtWidth.Height, SM_Tbr, vbPixels)
'設置高度
.Height = Me.ScaleY(nTemp, vbPixels, SM_Me)
End With
'定位PicToolBar內的控制項
nTemp = PicToolBar.ScaleHeight
LblWidth.Move CtlSpace, (nTemp - LblWidth.Height) / 2
TxtWidth.Move LblWidth.Left + LblWidth.Width, 0
LblHeight.Move TxtWidth.Left + TxtWidth.Width + CtlSpace, (nTemp - LblWidth.Height) / 2
TxtHeight.Move LblHeight.Left + LblHeight.Width, 0, TxtHeight.Width, TxtWidth.Height
CmdMake.Move TxtHeight.Left + TxtHeight.Width + CtlSpace, 0, CmdMake.Width, TxtWidth.Height
CmdReset.Move CmdMake.Left + CmdMake.Width + CtlSpace, 0, CmdReset.Width, TxtWidth.Height
ImgSrc.Move 0, 0
PicDest.Move 0, 0
'--設置數值
Call CmdReset_Click
With CDlgFile
.CancelError = True
.Flags = cdlOFNOverwritePrompt Or cdlOFNHideReadOnly
.Filter = "Windows點陣圖(*.bmp)|*.bmp|所有文件(*.*)|*.*"
End With
End Sub
Private Sub Form_Resize()
If Me.WindowState = 1 Then Exit Sub
On Error Resume Next
Dim nTemp As Long
nTemp = PicToolBar.Height
PicClipS.Move 0, nTemp, Me.ScaleWidth / 2, Me.ScaleHeight - nTemp
PicClipD.Move PicClipS.Width, nTemp, Me.ScaleWidth - PicClipS.Width, PicClipS.Height
End Sub
Private Sub mnuExit_Click()
Unload Me
End Sub
Private Sub mnuOpen_Click()
On Error Resume Next
CDlgFile.ShowOpen
If Err.Number Then Exit Sub '點了取消
'打開
Set ImgSrc.Picture = LoadPicture(CDlgFile.FileName)
If Err.Number Then
MsgBox "無法打開文件!", vbCritical
Exit Sub
End If
On Error GoTo 0
Call CmdReset_Click
End Sub
Private Sub mnuSave_Click()
On Error Resume Next
CDlgFile.ShowSave
If Err.Number Then Exit Sub '點了取消
'保存
SavePicture PicDest.Image, CDlgFile.FileName
If Err.Number Then
MsgBox "無法保存圖片!", vbCritical
Exit Sub
End If
On Error GoTo 0
End Sub