代碼如下:
Dim DataArr(0 To 3) As Byte, pDataArr(0 To 0) As Long
GdipLoadImageFromFile StrConv(picFile, vbUnicode), img '將圖片檔案picFile 讀入Img中
GdipGetImageBounds img, Dimensions, UnitPixel '獲得Img影像檔案的尺寸,保存入Dimensions結構體中
Rct.Right = Dimensions.nWidth
Rct.Bottom = Dimensions.nHeight
GdipBitmapLockBits img, Rct, ImageLockModeRead, PixelFormat, BmpData '讀取影像的資料
MakePoint VarPtrArray(DataArr), VarPtrArray(pDataArr), OldArrPtr, OldpArrPtr '模擬指標
pDataArr(0) = BmpData.scan0 '指向影像在記憶體中的首地址
PixelAddBytes = IIf(PixelFormat = PixelFormat32bppRGB, 4, 3) '每個像素所占用的位元組數
LineAddBytes = BmpData.Stride - BmpData.Width * PixelAddBytes '每個掃描行中多余的位元組數,不需要處理的
For Y = 1 To BmpData.Height '從上到下掃描
For X = 1 To BmpData.Width '從左到右掃描
DataArr(0) = 255 '具體的演算法, DataArr(2) =r, DataArr(1) =g, DataArr(0)=b,對像素的rgb值進行特定的處理,可以獲得特定的效果的新影像,比如各種濾鏡,反色,黑白,模糊等等效果,具體的像素處理演算法就是高科技了
DataArr(1) = 255
DataArr(2) =255
Next
pDataArr(0) = pDataArr(0) + LineAddBytes '一到下一個掃描行的起始位置
Next
FreePoint VarPtrArray(DataArr), VarPtrArray(pDataArr), OldArrPtr, OldpArrPtr '釋放模擬指標
GdipBitmapUnlockBits img, BmpData '更新資料
Pic.picture=Loadpicture("")
pic.Width=BmpData.Height-100
pic.Height=BmpData.Height-100
GdipCreateFromHDC Pic.hdc, graphics '圖片框DC中繪制影像,當pic的尺寸太大時,Pic.hdc變成無法創建autoredraw物件了,失效了,這時候如何創建記憶體hdc設備呢?然后將新影像繪制到記憶體dc上,而不是通過圖片框來中轉,然后如何將記憶體的hdc繪制好的影像保存為檔案呢?
GdipDrawImageRectRectI graphics, img, 0, 0, BmpData.Width-100, BmpData.Height-100, 100, 100, BmpData.Width-100, BmpData.Height-100, UnitPixel '將原影像Img的起點坐標(100,100)處開始,截取BmpData.Width-100, BmpData.Height-100的新區域影像
GdipDeleteGraphics graphics
Pic.Refresh '重繪
SavePicture a, "C:\Out.jpg" '保存新影像,問題出在這里,當pic的尺寸太大時,比如超過五六七像素以上,pic.hdc變成無法創建autoredraw物件了,所以,如何不通過pic.hdc,而是通過記憶體hdc的方式,直接將img中指定的區域影像復制到此記憶體hdc中,然后直接將此記憶體新影像保存為檔案,而通過圖片框來中轉呢?
GdipDisposeImage img '銷毀GDI+物件
GdiplusShutdown Token '關閉GDI+
uj5u.com熱心網友回復:
沒大師賜教嗎?uj5u.com熱心網友回復:
這是GDI+好不……GDI的話分別用GetBitmapBits和GetObject獲得位圖資料和位圖資訊(資料是指各個像素點的顏色,資訊是指寬高之類的東西)。
然后依次向檔案寫入BITMAPFILEHEADER、BITMAPINFOHEADER以及位圖資料……
GDI+沒怎么研究不敢妄下結論
uj5u.com熱心網友回復:
可以使用IPicture介面的SaveAsFile方法,具體代碼自己百度一下。轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/85563.html
標籤:API
上一篇:VB6中關于更改圖示
