none
寫入 Unmanaged 記憶體後,該如何讀出呢? RRS feed

  • 問題

  • 各位先進大家好.

    我有個問題想請教各位,因為廠商提供的SDK內有提供半套的做法(寫入至Unmanaged 記憶體),但是後面的部分嘗試用了很多方法都無法把記憶體內的Bitmap檔讀出

    -以下為程式碼-

    int ImageBufferId = (int)Target;

    int bufsize = ImageStream((IntPtr)0, 0, 0); //依照原廠商提供資訊,必須先取得所需記憶體大小
    IntPtr ImageBufferBlockIdPtr = Marshal.AllocHGlobal(bufsize);
    Marshal.WriteInt32(ImageBufferBlockIdPtr, ImageBufferId);
    Copy(ImageBufferBlockIdPtr, bufsize, 1, 0); //使用原廠商提供的寫入至IntPtr 

    請問我該如何把資料讀出來呢?

    感謝大家..

    祝各位平安順心.

    2016年6月24日 上午 08:31

所有回覆

  • 你用原廠函數就得問原廠。

    Marshal.WriteInt32 有對應的 Marshal.ReadInt32

    但是鬼才知道廠商自訂的 Copy 在幹嘛。


    不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?

    2016年6月24日 下午 04:53
  • 看樣子需要先用Marshall.ReadInt32函式讀出Buffer Block Id, 再利用廠商提供的功能(可能要查一下函式叫做Copy, Read, 之類的名稱將資料讀出
    2016年6月25日 上午 01:29
  • 了解,原廠商因為倒了,所以現在問吼就只給我一個答案叫做,我裡面的是BMP檔阿,你要自己試.....就這樣,然後就沒下文了!

    唉! 不管如何還是感謝您..

    2016年6月27日 上午 01:21
  • ok,原廠商是有提供函式將圖片存檔,但是我希望的是存檔出來的東西必須被加密的,所以才希望原廠商吐出來的圖,直接進memory我在讀出加密在存檔,沒想到在這地方卡關..

    不管如何也是感謝您.
    2016年6月27日 上午 01:46
  • BMP?
    可以把圖先存起來再用 LockBits / UnLockBits 處理
    把範例中 底下這段改成你的加密功能 應該可以滿足你的需求

                // Set every third value to 255. A 24bpp bitmap will look red.  
                for (int counter = 2; counter < rgbValues.Length; counter += 3)
                    rgbValues[counter] = 255;


    以下為簽名檔,如果你愛拉椅子坐那就是你的問題。
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度

    2016年7月11日 上午 11:53