  | 
				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 樓
  | 
		 | 
	 
	
		| 回頂端 | 
		 | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
  	 
	    
  	   | 
 	
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
  | 
   
  
		 |