在VB.NET操作縮放圖像中的顯示和保存縮放圖像,用到Image和Graphics類,在VSDotNet2K3下面Reference里自動添加了引用System.Drawing,直接用就行。
創(chuàng)新互聯(lián)是一家朝氣蓬勃的網(wǎng)站建設(shè)公司。公司專注于為企業(yè)提供信息化建設(shè)解決方案。從事網(wǎng)站開發(fā),網(wǎng)站制作,網(wǎng)站設(shè)計,網(wǎng)站模板,微信公眾號開發(fā),軟件開發(fā),小程序制作,十多年建站對混凝土攪拌罐等多個方面,擁有多年的網(wǎng)站維護經(jīng)驗。
實現(xiàn)VB.NET操作縮放圖像代碼如下:DimimgAsImageImage=Image.FromFile
(D:\Image\tstImage.jpg)
''tstImage是原先的圖片DimgrfxAsGraphics=Me
.CreateGraphics
grfx.DrawImage(img,0,0,img.Width*
3,img.Height*3)''在Form里顯示
DimimgnewAsNewSystem.Drawing.Bitmap
(img,img.Height*3,img.Width*3)
''新建一個放大的圖片
imgnew.Save(D:\Image\tstNewImage.jpg,
System.Drawing.Imaging.ImageFormat.Jpeg)
''保存放大后圖片
你可以建一個Form,然后在Form里拖進一個Button,把上面的代碼放在Button_Click事件里面源碼天空
,執(zhí)行就行了。
對上面VB.NET操作縮放圖像代碼的解釋:
1.要獲取Graphics對象只能從某一事件的參數(shù)中獲取或者使用窗體和控件對象的CreateGraphics方法來獲取-----上面代碼使用Me.CreateGraphics來引用這個對象。
2.加載一個圖片用Image類的FromFile或者FromStream方法
3.用DrawImage來顯示一個圖片,該方法有30多個重載方法,可以查MSDN了解細節(jié)。
4.保存時的一個問題:我們必須先建一個對象,用于存縮放圖像。
C#
using (img1 = new bitmap(xxx,xxx))
{
}
這樣的也無效么?
XPS文件格式經(jīng)常在文件處理應(yīng)用程序中使用。您可以在基于.NET Framework的應(yīng)用程序中使用C?;騐B.NET以編程方式將XPS或OXPS轉(zhuǎn)換為JPG或PNG圖像。
讓我們逐步介紹以下方案,以了解有關(guān)XPS轉(zhuǎn)換的更多信息:
使用C?;騐B.NET將XPS,OXPS轉(zhuǎn)換為JPG圖像
使用C#或VB.NET將XPS,OXPS轉(zhuǎn)換為PNG圖像
目前,.NET版Aspose.page升級到v20.10版,感興趣的朋友可點擊下載
使用C?;騐B.NET將XPS,OXPS轉(zhuǎn)換為JPG圖像
JPG文件之所以出名是因為它們在所有系統(tǒng)環(huán)境中均受支持。您可以使用C?;騐B.NET以編程方式將XPS或OXPS文件轉(zhuǎn)換為JPG圖像。對于XPS或OXPS到JPG圖像的轉(zhuǎn)換,應(yīng)遵循以下步驟:
加載輸入XPS或OXPS文件
初始化JpegSaveOptions對象
指定要渲染的SmoothingMode,Resolution和PageNumbers
保存輸出的JPG圖像
以下代碼顯示了如何使用C#語言將XPS或OXPS轉(zhuǎn)換為JPG圖像:
// Input file
string inputFileName = dataDir + "input.xps";
//Output file
string outputFileName = dataDir + "XPStoImage_out.jpeg";
// Initialize XPS input stream
using (Stream xpsStream = File.Open(inputFileName, FileMode.Open, FileAccess.Read))
{
// Load XPS document form the stream
XpsDocument document = new XpsDocument(xpsStream, new XpsLoadOptions());
// or load XPS document directly from file. No xpsStream is needed then.
// XpsDocument document = new XpsDocument(inputFileName, new XpsLoadOptions());
// Initialize options object with necessary parameters.
JpegSaveOptions options = new JpegSaveOptions()
{
SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality,
Resolution = 300
};
// Create rendering device for JPG format
ImageDevice device = new ImageDevice();
document.Save(device, options);
// Iterate through document partitions (fixed documents, in XPS terms)
for (int i = 0; i device.Result.Length; i++) // Iterate through partition pages for (int j = 0; j device.Result[i].Length; j++) { // Initialize image output stream using (Stream imageStream = System.IO.File.Open(Path.GetDirectoryName(outputFileName) + Path.GetFileNameWithoutExtension(outputFileName) + "_" + (i + 1) + "_" + (j + 1) + Path.GetExtension(outputFileName), System.IO.FileMode.Create, System.IO.FileAccess.Write)) // Write image imageStream.Write(device.Result[i][j], 0, device.Result[i][j].Length); } }
使用C?;騐B.NET將XPS,OXPS轉(zhuǎn)換為PNG圖像
可能需要使用C?;騐B.NET和Aspose.Page for .NET API將XPS或OXPS文件轉(zhuǎn)換為PNG。您需要按照以下步驟將XPS轉(zhuǎn)換為PNG:
加載輸入XPS或OXPS文件
初始化PngSaveOptions對象
設(shè)置圖像分辨率或頁面編號為渲染
保存輸出的PNG圖像
首先,還是談?wù)剤D像像素時數(shù)據(jù)獲取方面吧,.net中的圖像相關(guān)類基本上都是基于GDI+的,因此,圖像數(shù)據(jù)的獲取其實也是調(diào)用GDI+的一些函數(shù)。這個函數(shù)就是LockBits,在vb.net中彩色圖像數(shù)據(jù)的快速獲取 一文中,我們是調(diào)用了Marshal.Copy把LockBits鎖定的內(nèi)存數(shù)據(jù)拷貝到數(shù)據(jù)中,然后對數(shù)組中的值進行處理。這樣做主要的原因是VB.NET不好直接訪問內(nèi)存(Marshal.ReadByte之類的函數(shù)不適合用于大型的循環(huán)中)。那么,這就造成了2個不好的事情,第一:在同一時間需要2倍于圖像數(shù)據(jù)量的內(nèi)存,第二:內(nèi)存數(shù)據(jù)拷貝到數(shù)據(jù),以及處理后再把數(shù)組的數(shù)據(jù)拷貝會內(nèi)存中都是會減低速度的。作為一種改進,我們應(yīng)該充分利用LockBits的功能。LockBits中的LockMode中有一種模式為ImageLockMode.UserInputBuffer,該模式下需要用戶先申請內(nèi)存,然后在把圖像數(shù)據(jù)按照相關(guān)格式填充如這個內(nèi)存中。這樣,就可以先定義個數(shù)組,然后把圖像數(shù)據(jù)填充到這個數(shù)組中,就避免了來回拷貝的耗時了,簡單示例代碼如下:
Dim BmpData As New BitmapData
Stride = ((Bmp.Width * 3 + 3) And HFFFFFFFC)
Dim PixleValue(Stride * Bmp.Height) As Byte
Dim Hanlde As GCHandle = GCHandle.Alloc(PixleValue, GCHandleType.Pinned)
BmpData.Scan0 = Hanlde.AddrOfPinnedObject()