回答
有一個Bitmap
構造函數重載,這需要你擁有的一切(加PixelFormat
):
public Bitmap(int width, int height, int stride, PixelFormat format, IntPtr scan0);
這可能會實現(如果args.Buffer
是blittable類型的數組,像byte
爲例):
Bitmap bitmap;
var gch = System.Runtime.InteropServices.GCHandle.Alloc(args.Buffer, GCHandleType.Pinned);
try
{
bitmap = new Bitmap(
args.Width, args.Height, args.Stride,
System.Drawing.Imaging.PixelFormat.Format24bppRgb,
gch.AddrOfPinnedObject());
}
finally
{
gch.Free();
}
更新:
Probabl y最好是將圖像字節手動複製到新創建的Bitmap
,因爲它好像構造函數沒有這樣做,並且如果byte[]
圖像數據數組被垃圾收集,可能會發生各種不好的事情。
var bitmap = new Bitmap(args.Width, args.Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
var data = bitmap.LockBits(
new Rectangle(0, 0, args.Width, args.Height),
System.Drawing.Imaging.ImageLockMode.WriteOnly,
System.Drawing.Imaging.PixelFormat.Format24bppRgb);
if(data.Stride == args.Stride)
{
Marshal.Copy(args.Buffer, 0, data.Scan0, args.Stride * args.Height);
}
else
{
int arrayOffset = 0;
int imageOffset = 0;
for(int y = 0; y < args.Height; ++y)
{
Marshal.Copy(args.Buffer, arrayOffset, (IntPtr)(((long)data.Scan0) + imageOffset), data.Stride);
arrayOffset += args.Stride;
imageOffset += data.Stride;
}
}
bitmap.UnlockBits(data);
我所給出的是我可以在參數 中找到步幅/緩衝區等ie - > args .Buffer = buffer ... args.Stride = stride等 但是使用 位圖測試=新的位圖(args.Width,args.Height,args.Stride,PixelFormats.Rgb24,args.Buffer); 給了我一個錯誤:(我有點新的圖像編程... – Mattb2291 2012-07-31 12:02:09
這個工作......好吧......讓我到某個地方......? var test = BitmapFrame.Create(args.Width, args.Height,300D,300D,PixelFormats.Rgb24,null,args.Buffer,args.Stride); – Mattb2291 2012-07-31 12:14:49
'args.Buffer'' byte []'還有'System.Drawing.Bitmap'和'BitmapFrame '來自2個不同的GUI框架,你必須決定使用什麼 – max 2012-07-31 12:18:26
,如果你有緩衝區的字節[],寬度和高度+的像素格式(跨步)這應該工作
public Bitmap CreateBitmapFromRawDataBuffer(int width, int height, PixelFormat imagePixelFormat, byte[] buffer)
{
Size imageSize = new Size(width, height);
Bitmap bitmap = new Bitmap(imageSize.Width, imageSize.Height, imagePixelFormat);
Rectangle wholeBitmap = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
// Lock all bitmap's pixels.
BitmapData bitmapData = bitmap.LockBits(wholeBitmap, ImageLockMode.WriteOnly, imagePixelFormat);
// Copy the buffer into bitmapData.
System.Runtime.InteropServices.Marshal.Copy(buffer, 0, bitmapData.Scan0, buffer.Length);
// Unlock all bitmap's pixels.
bitmap.UnlockBits(bitmapData);
return bitmap;
}
- 1. 將WPF寬度/高度轉換爲VB 6寬度/高度
- 2. 將深度緩衝區轉換爲GLSL的深度紋理
- 3. Html高度緩衝區
- 4. 會話會保存緩衝區的寬度和高度嗎?
- 5. 設置渲染緩衝區寬度和高度(Open GL ES)
- 6. 如何將視圖寬度和高度轉換爲CGPoint座標?
- 7. 將UIImage轉換爲8灰度像素緩衝區
- 8. 將深度渲染緩衝區複製到深度緩衝區
- 9. C#將幅度/相位轉換爲實數/虛數
- 10. 旋轉位圖android時獲取位圖的寬度和高度?
- 11. 試圖將imagedata轉換爲高度圖
- 12. 如何將BGRA緩衝區轉換爲RGBA緩衝區格式?
- 13. 緩衝區溢出緩衝區長度
- 14. android將文本寬度(以像素爲單位)轉換爲屏幕寬度/高度的百分比
- 15. Emacs shell輸出緩衝區高度
- 16. Node.js將緩衝區轉換爲Int8Array
- 17. 將ID3D11Texture2D轉換爲內存緩衝區
- 18. 將Scala緩衝區轉換爲Java ArrayList
- 19. 如何在OGRE中設置深度緩衝區(z緩衝區)的位寬/精度?
- 20. imageView中的位圖高度和寬度
- 21. 確定位圖的寬度和高度
- 22. 我如何獲得比位圖寬度小的步幅?
- 23. 從緩衝區轉換爲基址64使用角度閱讀
- 24. Vulkan深度緩衝區位置重構
- 25. 如何獲取/設置默認幀緩衝區的寬度和高度?
- 26. 將32bpp位圖轉換爲16bpp(灰度)
- 27. 將字節[]轉換爲不知道寬度和高度的圖像EmguCV
- 28. iOS:從OpenAL將音高移位和管道輸出轉換爲緩衝區
- 29. C緩衝區C#位圖對象
- 30. Android:將imageview轉換爲位圖,灰度,將位圖轉換爲imageview
HTTP://whathaveyoutried.com/...表現出一定的代碼... – 2012-07-31 11:41:49
你的意思是說上傳時想要以二進制格式將圖像保存到數據庫中,並檢索值並顯示爲圖像? – 2012-07-31 11:42:53
我的意思是有人編寫了一個代碼來獲取攝像機的高度/寬度/跨度/緩衝區。他現在要我做點什麼。我想使用位圖圖像,他使用writeablebitmap並告訴我如何獲得步幅/寬度等... – Mattb2291 2012-07-31 12:04:19