none
如何將png檔 轉成bmp 24bit RRS feed

  • 問題

  • 如何將png檔 轉成bmp 24bit   
    我用下面的語法儲存成的是256色的bmp
    請問下面的語法要怎麼改成才儲存成 24bit的bmp
        bmp1 = New Bitmap("Image.png")     '載入畫布
        bmp1.Save("C:\Image.bmp", System.Drawing.Imaging.ImageFormat.bmp)
    2009年12月28日 上午 03:17

解答

  • bmp1 = New Bitmap("Image.png") '載入畫布 

     Dim Dest_bmp As New Bitmap(bmp1.width, bmp1.height, Format24bppRgb) 

     ' Create graphics object for alteration. 
     Dim Gs As Graphics = Graphics.FromImage(Dest_bmp) 

     ' Create Point for upper-left corner of image. 
     Dim ulCorner As New Point(0, 0) 

     ' Draw image 
     Gs.DrawImage(bmp1, ulCorner) 


     Dest_bmp.Save("C:\Image.bmp", System.Drawing.Imaging.ImageFormat.bmp) 

     ' Dispose of graphics object.
     Gs.Dispose()




    Cmf.Net (C) 2009
    • 已標示為解答 x32 2009年12月28日 上午 05:26
    2009年12月28日 上午 03:46
    • 已標示為解答 x32 2009年12月29日 上午 07:48
    • 已取消標示為解答 x32 2009年12月29日 上午 07:49
    • 已標示為解答 x32 2009年12月29日 上午 10:01
    2009年12月29日 上午 06:39

  •         Dest_bmp = New Bitmap(640, 480, Imaging.PixelFormat.Format24bppRgb)

            Dim Src_bmp As Bitmap

            Src_bmp = System.Drawing.Bitmap.FromStream(ms)


             ' Create graphics object for alteration. 
              Dim Gs As Graphics = Graphics.FromImage(Dest_bmp) 

             ' Create Point for upper-left corner of image. 
               Dim ulCorner As New Point(0, 0) 

             ' Draw image 
             Gs.DrawImage(Src_bmp, ulCorner) 



            Dest_bmp.Save(Savename, Imaging.ImageFormat.Bmp)

            ms.Close()


    Cmf.Net (C) 2009
    • 已標示為解答 x32 2010年1月5日 上午 06:47
    2010年1月5日 上午 05:18
  • 開新的 bitmap 要用 DrawImage 畫上去。
    New Bitmap 是傳回一個空白畫面的參照
    Bitmap.FromStream 是傳回一個記憶體圖檔的參照

    你第二個參照已經壓掉第一個參照了,當然不會轉圖檔。

    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 x32 2010年1月5日 上午 06:47
    2010年1月5日 上午 06:19

所有回覆

  • bmp1 = New Bitmap("Image.png") '載入畫布 

     Dim Dest_bmp As New Bitmap(bmp1.width, bmp1.height, Format24bppRgb) 

     ' Create graphics object for alteration. 
     Dim Gs As Graphics = Graphics.FromImage(Dest_bmp) 

     ' Create Point for upper-left corner of image. 
     Dim ulCorner As New Point(0, 0) 

     ' Draw image 
     Gs.DrawImage(bmp1, ulCorner) 


     Dest_bmp.Save("C:\Image.bmp", System.Drawing.Imaging.ImageFormat.bmp) 

     ' Dispose of graphics object.
     Gs.Dispose()




    Cmf.Net (C) 2009
    • 已標示為解答 x32 2009年12月28日 上午 05:26
    2009年12月28日 上午 03:46
  • 感謝  可以了

    2009年12月28日 上午 05:26
  • 這個觀念要補充一下:
    此程式碼要能正常執行,必須要螢幕顯示設在 24 bits Color 以上,比如說透過遠端連線去執行時,有些為了精簡流量,把 color 設在 8 bits ...


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2009年12月28日 上午 09:38
  • 我遇到問題了
    我的程式是要去抓取示波器的波型  在去進行分析
    我用上面的語法   執行第一遍沒問題
    但在執行一遍時都在這一行出現  
     Dest_bmp.Save("C:\Image.bmp", Imaging.ImageFormat.Bmp)         在 GDI+ 中發生泛型錯誤。
    請問一下要怎麼辦呢
    還有別的語法能將PNG轉成BMP 24bit的嗎

    2009年12月29日 上午 01:00
  • 第二次不能跑的原因應該是這個檔被你目前的程式鎖住了...
    看看你哪裡有讀這個圖檔進來。

    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2009年12月29日 上午 02:14
  • 好像真的是被鎖住的問題
    我剛剛把儲存的檔案名稱 按一下就 Image-1.bmp  Image-2.bmp  這樣就沒問題了
    請問一下 有什麼方法可以不需這樣做
    因為這樣子做   我的檔案會生出很多圖檔
    2009年12月29日 上午 06:32
    • 已標示為解答 x32 2009年12月29日 上午 07:48
    • 已取消標示為解答 x32 2009年12月29日 上午 07:49
    • 已標示為解答 x32 2009年12月29日 上午 10:01
    2009年12月29日 上午 06:39
  • 我改了老半天   還是弄不出來
    我在google 看了很多討論也都是用這範例
    所以應該用沒問題吧
    2009年12月29日 上午 10:00
  • 在本站已有多次討論了:
    http://www.google.com.tw/search?hl=zh-TW&source=hp&q=%E5%9C%A8+GDI%2B+%E4%B8%AD%E7%99%BC%E7%94%9F%E6%B3%9B%E5%9E%8B%E9%8C%AF%E8%AA%A4+site%3Asocial.msdn.microsoft.com%2FForums%2Fzh-TW%2F&btnG=Google+%E6%90%9C%E5%B0%8B&meta=&aq=f
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2009年12月29日 下午 02:49
  • 我參考了相關的討論    我使用memorystream
    但想把它轉成24bit  還是出現問題 存起來的   還是256色  
    程式碼如下
      Dim filename As String = "image.png"
            Dim Savename As String = "image.bmp"
            Dim Dest_bmp As Bitmap
            Dim ms As New MemoryStream
            Dim fs As New FileStream(filename, FileMode.Open, FileAccess.Read)
            Dim data(fs.Length) As Byte
            fs.Read(data, 0, fs.Length)
            ms.Write(data, 0, data.Length)
            fs.Close()
            Dest_bmp = New Bitmap(640, 480, Imaging.PixelFormat.Format24bppRgb)
            Dest_bmp = System.Drawing.Bitmap.FromStream(ms)
            Dest_bmp.Save(Savename, Imaging.ImageFormat.Bmp)
            ms.Close()




    請問一下   FileStream有辦法在建構函數輸入是bitmap  而不是路徑
    還是有什麼辦法  能把bitmap 儲存到MemoryStream

    2010年1月5日 上午 01:35

  •         Dest_bmp = New Bitmap(640, 480, Imaging.PixelFormat.Format24bppRgb)

            Dim Src_bmp As Bitmap

            Src_bmp = System.Drawing.Bitmap.FromStream(ms)


             ' Create graphics object for alteration. 
              Dim Gs As Graphics = Graphics.FromImage(Dest_bmp) 

             ' Create Point for upper-left corner of image. 
               Dim ulCorner As New Point(0, 0) 

             ' Draw image 
             Gs.DrawImage(Src_bmp, ulCorner) 



            Dest_bmp.Save(Savename, Imaging.ImageFormat.Bmp)

            ms.Close()


    Cmf.Net (C) 2009
    • 已標示為解答 x32 2010年1月5日 上午 06:47
    2010年1月5日 上午 05:18
  • 開新的 bitmap 要用 DrawImage 畫上去。
    New Bitmap 是傳回一個空白畫面的參照
    Bitmap.FromStream 是傳回一個記憶體圖檔的參照

    你第二個參照已經壓掉第一個參照了,當然不會轉圖檔。

    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 x32 2010年1月5日 上午 06:47
    2010年1月5日 上午 06:19
  • 我終於看懂了   3q

    2010年1月5日 上午 06:47