Public Function TranBlt(DestHdc As Long, X As Long, Y As Long, W As Long, H As Long, srcHdcOrBmp As Long, Optional srcX As Integer, Optional srcY As Integer, Optional srcW As Long, Optional srcH As Long, Optional tc As Long = -1, Optional IsBmp As Boolean) As Long
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:主機域名、虛擬空間、營銷軟件、網(wǎng)站建設、長島網(wǎng)站維護、網(wǎng)站推廣。
'srcHdcOrBmp參數(shù) 傳入的可以是hdc也可以是Bmp對象的Handle,
'IsBmp參數(shù) 為真時srcHdcOrBmp代表Bmp對象的Handle,為假時代表hdc
'返回值 成功時返回透明色,不成功時返回-1
Dim tHdc(3) As MemHdc
Dim J As Long, oc As Long, I As Long, Bm As BITMAP, cc As Long, NewDc As Long
Dim sw As Long, sh As Long, sBmp As Long, sHdc As Long, obm As Long, NewX As Long, NewY As Long
If DestHdc = 0 Or srcHdcOrBmp = 0 Or W = 1 And H = 1 Then GoTo fail
If IsBmp Then '若傳入的是Bmp句柄,需為其創(chuàng)建一個臨時DC
sBmp = srcHdcOrBmp
tHdc(3) = NewMyHdc(DestHdc, 0, 0, srcHdcOrBmp)
sHdc = tHdc(3).hdc
Else
sHdc = srcHdcOrBmp
If srcW = 0 Then sBmp = GetCurrentObject(sHdc, 7)
End If
If sHdc = 0 Or sBmp = 0 Then GoTo fail
If srcW = 0 Then '若沒有提供源圖大小,需取得整個源圖大小
GetObj sBmp, Len(Bm), Bm
sw = Bm.bmWidth - srcX
sh = Bm.bmHeight - srcY
Else
sw = srcW
sh = srcH
End If
If sw 1 Or sh 1 Then GoTo fail
If tc = -1 Then
cc = GetPixel(sHdc, srcX, srcY) '將左上角第一個像素作為源圖背景色,用于透明
Else
cc = tc
End If
If W sw Or H sh Then
tHdc(2) = NewMyHdc(DestHdc, W, H)
StretchBlt tHdc(2).hdc, 0, 0, W, H, sHdc, srcX, srcY, sw, sh, vbSrcCopy
'先將源圖縮放,下面步驟就一樣了。
NewDc = tHdc(2).hdc
Else
NewDc = sHdc
NewX = srcX
NewY = srcY
End If
BitBlt DestHdc, X, Y, W, H, NewDc, NewX, NewY, vbSrcInvert
'將源圖先反色(XOR)繪入目標圖,若源圖背景為黑色,此步可省
'下面是制作Mask圖的方法
I = CreateBitmap(W, H, 1, 1, ByVal 0) '建立單色位圖
tHdc(0) = NewMyHdc(DestHdc, 0, 0, I) '為單色圖建立新DC,并選入
tHdc(1) = NewMyHdc(DestHdc, W, H) '另建一個彩色圖及DC,用于存放Mask圖
oc = SetBkColor(NewDc, cc) '將源圖背景色改為透明色
BitBlt tHdc(0).hdc, 0, 0, W, H, NewDc, NewX, NewY, vbSrcCopy
'先將源圖繪入單色DC,由此產(chǎn)生只有正反的Mask圖,背景色(透明色)為黑,其它為白
SetBkColor NewDc, oc '恢復源圖背景色,不是必須的,但這是個好習慣。
BitBlt tHdc(1).hdc, 0, 0, W, H, tHdc(0).hdc, 0, 0, vbSrcCopy
'單色DC必須復制進彩色DC才能進行后面的的AND運算
'Mask圖完成,并已放入彩色DC
BitBlt DestHdc, X, Y, W, H, tHdc(1).hdc, 0, 0, vbSrcAnd '標準透明繪圖:選將Mask圖用And運算繪入,
BitBlt DestHdc, X, Y, W, H, NewDc, NewX, NewY, vbSrcInvert '再將源圖以反色(XOR)繪入一次
DelMyHdc tHdc(0)
DelMyHdc tHdc(1)
If tHdc(2).hdc 0 Then DelMyHdc tHdc(2)
If tHdc(3).hdc 0 Then DelMyHdc tHdc(3)
TranBlt = cc
Exit Function
fail:
If tHdc(3).hdc 0 Then DelMyHdc tHdc(3)
TranBlt = -1
End Function
Private Function NewMyHdc(dHdc As Long, W As Long, H As Long, Optional Bm As Long) As MemHdc
With NewMyHdc
.hdc = CreateCompatibleDC(dHdc)
If Bm = 0 Then
.Bmp = CreateCompatibleBitmap(dHdc, W, H)
Else
.Bmp = Bm
End If
.obm = SelectObject(.hdc, .Bmp)
End With
End Function
Private Function DelMyHdc(MyHdc As MemHdc, Optional nobmp As Boolean) As MemHdc
With MyHdc
If .hdc 0 And .obm 0 Then SelectObject .hdc, .obm
If nobmp = False And .Bmp 0 Then DeleteObject .Bmp
If .hdc 0 Then DeleteDC .hdc
End With
End Function
把這個函數(shù)放在一個BAS里,然后在窗體里
TranBlt pic.hdc, X,Y,W,H,PIC2.Picture.Handle, _
TX,TY,TW,TH, , True
就OK
矢量圖是指大小變化,但是不出現(xiàn)鋸齒狀的失真,通常是用其他圖形設計軟件,比如coreldraw輸出圖片,拿出來使用,直接用vbnet不能實現(xiàn)吧
很簡單的方法,貌似沒有。這個需要自己寫很多代碼:
用一個ListView控件。
判斷滾動條當前所顯示的圖片集合,獲取它們的物理路徑。
用Bitmap.FromImage方法把這些圖片讀出來,
然后獲取縮略圖,
把縮略圖用Graphics.DrawImage()繪制出來。
我可以提供Bitmap如何獲取縮略圖的方法:
'''?summary必須創(chuàng)建一個委托并將對此委托的引用作為獲取縮略圖?callback?參數(shù)傳遞,但不使用此委托。/summary
Public?Function?ThumbnailCallback()?As?Boolean
Return?False
End?Function
'''?summary返回Image,表示圖像指定?寬?和?高?的縮略圖。/summary
Public?Function?獲取縮略圖(位圖?As?Bitmap,?寬?As?Integer,?高?As?Integer)?As?Image
Dim?myCallback?As?New?Image.GetThumbnailImageAbort(ThumbnailCallback)
Return?位圖.GetThumbnailImage(寬,?高,?myCallback,?IntPtr.Zero)
End?Function
XPS文件格式經(jīng)常在文件處理應用程序中使用。您可以在基于.NET Framework的應用程序中使用C?;騐B.NET以編程方式將XPS或OXPS轉換為JPG或PNG圖像。
讓我們逐步介紹以下方案,以了解有關XPS轉換的更多信息:
使用C?;騐B.NET將XPS,OXPS轉換為JPG圖像
使用C?;騐B.NET將XPS,OXPS轉換為PNG圖像
目前,.NET版Aspose.page升級到v20.10版,感興趣的朋友可點擊下載
使用C?;騐B.NET將XPS,OXPS轉換為JPG圖像
JPG文件之所以出名是因為它們在所有系統(tǒng)環(huán)境中均受支持。您可以使用C#或VB.NET以編程方式將XPS或OXPS文件轉換為JPG圖像。對于XPS或OXPS到JPG圖像的轉換,應遵循以下步驟:
加載輸入XPS或OXPS文件
初始化JpegSaveOptions對象
指定要渲染的SmoothingMode,Resolution和PageNumbers
保存輸出的JPG圖像
以下代碼顯示了如何使用C#語言將XPS或OXPS轉換為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轉換為PNG圖像
可能需要使用C?;騐B.NET和Aspose.Page for .NET API將XPS或OXPS文件轉換為PNG。您需要按照以下步驟將XPS轉換為PNG:
加載輸入XPS或OXPS文件
初始化PngSaveOptions對象
設置圖像分辨率或頁面編號為渲染
保存輸出的PNG圖像