首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 平面设计 > 图形图像 >

摄像头 保存bmp图片, 从而引出的bmp格式的有关问题

2013-10-11 
摄像头 保存bmp图片, 从而引出的bmp格式的问题!打开摄像头 保存bmp代码如下(如果觉得头疼可先看看我的后面

摄像头 保存bmp图片, 从而引出的bmp格式的问题!
打开摄像头 保存bmp代码如下(如果觉得头疼可先看看我的后面的文字说明,然后再看代码)


        [DllImport("avicap32.dll", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
        public static extern int capCreateCaptureWindowA([MarshalAs(UnmanagedType.VBByRefStr)]   ref   string lpszWindowName, int dwStyle, int x, int y, int nWidth, short nHeight, int hWndParent, int nID);
        [DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
        public static extern bool DestroyWindow(int hndw);
        [DllImport("user32", EntryPoint = "SendMessageA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
        public static extern int SendMessage(int hwnd, int wMsg, int wParam, [MarshalAs(UnmanagedType.AsAny)]   object lParam);
        [DllImport("user32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
        public static extern int SetWindowPos(int hwnd, int hWndInsertAfter, int x, int y, int cx, int cy, int wFlags);

//open method
            hHwnd = ControlCamera.capCreateCaptureWindowA(ref   refDevice, 1342177280, 0, 0, 640, 360, this.videoWindow.Handle.ToInt32(), 0);

            if (ControlCamera.SendMessage(hHwnd, 0x40a, intDevice, 0) > 0)
            {
                ControlCamera.SendMessage(this.hHwnd, 0x435, -1, 0);
                ControlCamera.SendMessage(this.hHwnd, 0x434, 0x42, 0);
                ControlCamera.SendMessage(this.hHwnd, 0x432, -1, 0);
                ControlCamera.SetWindowPos(this.hHwnd, 1, 0, 0, intWidth, intHeight, 6);
                isOpen = true;
            }
            else
            {
                ControlCamera.DestroyWindow(this.hHwnd);
            }

//another method
IDataObject obj_camera = Clipboard.GetDataObject();

Image image_camera = (Image)obj_camera.GetData(typeof(Bitmap));

image_camera.Save(str, ImageFormat.Bmp);


1.通过上面的代码保存出来的bmp是 3M多大

2.把这个bmp通过画图进行稍微的编辑(实际仅仅使用画笔点了个点,图片尺寸格式均未改变)  保存   2M多大
再对这个2M 大的图片进行画图编辑  保存  大小几乎不变了
相信第二步保存bmp肯定丢弃了bmp中的一些信息

问题:我的代码如何修改才能保存出步骤2中的 2M 多大的bmp图片?

我想直接保存这个2M大图片的原因:我想对某两个图片进行像素的比较(此部分工作通过C++做的,封装dll,并由C#调用),但是使用步骤1那个3M的图片解析的有问题,但使用步骤2保存的图片没问题。

如果您知道可能的原因,请不吝赐教,在此先拜谢。悬赏分会酌情增加。
[解决办法]
估计3M多的那个是带alpha通道的32位位图,2M的是24位的,你把channel读出来看看

热点排行