 |
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
gino1725
註冊時間: 2009-02-24 文章: 3
第 1 樓
|
發表於: 星期一 八月 04, 2014 2:57 pm 文章主題: 高手請進,請教關於產生bmp圖檔的問題 |
|
|
各位前輩好,
下列是我在網路上找到關於"bmp圖檔轉換為黑白圖檔"的程式,
可否請教各位先進,這個程式所產生出來的黑白圖檔為"24"(ColorDepth位元深度),怎麼樣修改讓它所產生出來的格式為"1"(ColorDepth位元深度)?
謝謝.
Public _Form1
_Form1=CreateObject("Form1")
_Form1.show
RETURN
DEFINE CLASS Form1 AS form
Autocenter=.T.
Height = 500
Width = 900
Caption = "VFP GDI+ 圖檔轉為黑白"
MaxButton = .F.
BackColor =RGB( 211,217,254)
PROCEDURE Init
this.AddObject("Image1","_classname1")
this.AddObject("Command1","_classname2")
this.AddObject("Image2","_classname3")
ENDPROC
ENDDEFINE
DEFINE CLASS _classname1 AS image
Visible=.T.
Stretch = 2
Height = 400
Left = 12
Top = 12
Width = 400
ENDDEFINE
DEFINE CLASS _classname2 AS commandbutton
Visible=.T.
Top = 450
Left = 133
Height = 25
Width = 120
Caption = "選擇圖檔"
PROCEDURE Click
imagefile=GETPICT()
IF !EMPTY(imagefile)
thisform.image1.Picture=imagefile
STORE 0 TO nImage,imgwidth,imgheight,argb
DECLARE INTEGER GdipLoadImageFromFile IN gdiplus.DLL ;
STRING wFilename, INTEGER @nImage
DECLARE INTEGER GdipGetImageWidth IN gdiplus;
INTEGER img,;
INTEGER @ imgwidth
DECLARE INTEGER GdipGetImageHeight IN gdiplus;
INTEGER img,;
INTEGER @ imgheight
DECLARE Long GdipBitmapGetPixel in GdiPlus.dll ;
Long nativeImage, Long x, Long y, Long @argb
DECLARE Long GdipBitmapSetPixel in GdiPlus.dll ;
Long nativeImage, Long x, Long y, Long argb
DECLARE INTEGER GdipSaveImageToFile IN gdiplus.DLL ;
INTEGER nImage, STRING wFilename, STRING qEncoder, INTEGER nEncoderParamsPtr
DECLARE INTEGER CLSIDFromString IN ole32 STRING lpsz, STRING @pclsid
DECLARE Long GdipDisposeImage IN Gdiplus.dll Long nativeImage
GdipLoadImageFromFile(STRCONV(imagefile + CHR(0), 5), @nImage)
GdipGetImageWidth(nImage,@imgwidth)
GdipGetImageHeight(nImage,@imgheight)
NUM=110&&?值
FOR i=1 TO imgwidth-1
FOR ii=1 TO imgheight-1
GdipBitmapGetPixel(nImage,i,ii,@argb)
R = Bitrshift(Bitand(argb, 0x00FF0000), 16)
G = Bitrshift(Bitand(argb, 0x0000FF00), 8 )
B = Bitand(argb, 0x000000FF)
IF (R+G+B)/3>128
GdipBitmapSetPixel(nImage,i,ii,0xFFFFFF)
ELSE
GdipBitmapSetPixel(nImage,i,ii,0x000000)
ENDI
ENDFOR
ENDFOR
*CLSID_BMP "{557CF400-1A04-11D3-9A73-0000F81EF32E}"
*CLSID_JPEG "{557CF401-1A04-11D3-9A73-0000F81EF32E}"
*CLSID_GIF "{557CF402-1A04-11D3-9A73-0000F81EF32E}"
*CLSID_TIFF "{557CF405-1A04-11D3-9A73-0000F81EF32E}"
*CLSID_PNG "{557CF406-1A04-11D3-9A73-0000F81EF32E}"
lcEncoder = REPLICATE(CHR(0),16)
newimage='Emboss_'+JUSTFNAME(imagefile)
CLSIDFromString(STRCONV("{557CF401-1A04-11D3-9A73-0000F81EF32E}" + CHR(0), 5), @lcEncoder)
GdipSaveImageToFile(nImage, STRCONV(newimage,5) + CHR(0), lcEncoder, 0)
GdipDisposeImage(nImage)
thisform.image2.Picture=newimage
thisform.Refresh
ENDIF
ENDPROC
ENDDEFINE
DEFINE CLASS _classname3 AS image
Visible=.T.
Stretch = 2
Height = 400
Left = 430
Top = 12
Width = 400
ENDDEFINE |
|
回頂端 |
|
 |
ckp6250
註冊時間: 2004-07-30 文章: 1645
第 2 樓
|
|
回頂端 |
|
 |
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|