5312|12

71

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

WINCE中存的图,在win32的程序里调不出来?? [复制链接]

各位大侠,现在我把在wince环境下保存的bmp位图拷到硬盘里,然后想在win32环境下的程序里打开,使用的是LoadImage函数。为什么老是没有反应呢??如果把位图换成普通的bmp位图(就是在网上随便搜的),就可以。。
到底问题出在哪呢???

最新回复

问题还是没有解决,不过我把保存时的位图拉大一点,就可以了。  详情 回复 发表于 2010-3-6 10:25
点赞 关注

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
是不是wince下存的bmp格式和windows上的不一样?bmp的格式也有几种的,lz从bmp的存储结构方面找找原因。
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
估计WinCE保存的时候有问题,去看看BMP的结构。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

4
 
        CADSAMPLEApp *app = (CADSAMPLEApp *)AfxGetApp(); //生成指向应用程序类的指针
        HDC  hMemDC;        
        int  width, height;

        HDC hDCS;
        HDC m_dcCompatible;
        RECT rectS1;
        HWND m_hWnd1S=::GetDlgItem(m_hWnd,IDC_STATIC1);
        hDCS=::GetDC(m_hWnd1S);
        ::GetClientRect (m_hWnd1S, &rectS1);
        m_dcCompatible=::CreateCompatibleDC(hDCS);
        ::SelectObject(m_dcCompatible,hBitmaps);

        //指向象素缓冲
        BYTE  *lpBitmapBits = NULL;
        //初始化位图宽高
        CRect  rectS;   
        GetDlgItem(IDC_STATIC1)->GetWindowRect(&rectS);
        width=(rectS.right-rectS.left);
        height=(rectS.bottom-rectS.top);

        //内存DC
        hMemDC = CreateCompatibleDC(m_dcCompatible);//自设过渡DC   
        HBITMAP hBitmap=CreateCompatibleBitmap(m_dcCompatible,width,height);   
        SelectObject(hMemDC,hBitmap);//确定过渡DC显示表面的大小

        //初始化 BITMAPINFO
        //为了在WINCE上使用 CreateDIBSection ,每个象素都存储为24位,且无压缩biCompression=0)
        BITMAPINFO RGB24BitsBITMAPINFO;
        ZeroMemory(&RGB24BitsBITMAPINFO, sizeof(BITMAPINFO));
        RGB24BitsBITMAPINFO.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
        RGB24BitsBITMAPINFO.bmiHeader.biWidth = width;
        RGB24BitsBITMAPINFO.bmiHeader.biHeight = height;
        RGB24BitsBITMAPINFO.bmiHeader.biPlanes = 1;
        RGB24BitsBITMAPINFO.bmiHeader.biBitCount = 24;

        //使用 CreateDIBSection 建立一个HBITMAP,以获得 图像数据指针 lpBitmapBits
        HBITMAP directBmp = CreateDIBSection(hMemDC,(BITMAPINFO*)&RGB24BitsBITMAPINFO,DIB_RGB_COLORS,(void **)&lpBitmapBits,NULL,0);
        //SelectObject 将directBmp选入内存DC
        HGDIOBJ previousObject = SelectObject(hMemDC, directBmp);

        //将屏幕DC拷贝到内存DC
        BitBlt(hMemDC,0,0,rectS.Width(),rectS.Height(),m_dcCompatible,0,0,SRCCOPY);//将兼容DC中的位图画到当前内存中

        //位图文件头
        BITMAPFILEHEADER bmBITMAPFILEHEADER;
        ZeroMemory(&bmBITMAPFILEHEADER, sizeof(BITMAPFILEHEADER));
        bmBITMAPFILEHEADER.bfType = 0x4d42;  //bmp  
        bmBITMAPFILEHEADER.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
        bmBITMAPFILEHEADER.bfSize = bmBITMAPFILEHEADER.bfOffBits + ((width*height)*3); ///3=(24 / 8);

        //写入文件
        FILE *mStream=NULL;
        if((mStream = fopen(filename, "wb")))
        {  
                //写文件头
                fwrite(&bmBITMAPFILEHEADER, sizeof(BITMAPFILEHEADER), 1, mStream);
                //写位图信息
                fwrite(&(RGB24BitsBITMAPINFO.bmiHeader), sizeof(BITMAPINFOHEADER), 1, mStream);
                //写象素值
                fwrite(lpBitmapBits,3*width*height, 1, mStream);
                //关闭文件
                fclose(mStream);
        }

        //释放资源
        DeleteObject(hMemDC);
        DeleteObject(m_dcCompatible);
        DeleteObject(directBmp);
        DeleteObject(previousObject);
        DeleteObject(hBitmap);

这是我在wince下的位图存储,有什么问题??
我将bmiHeader.biBitCount 改成4,直接存储就有问题了,而且读取时还是读不了~~
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

5
 
看看图软件试试看,能否看到?
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 4 楼 91program 的回复:
看看图软件试试看,能否看到?


啥意思?如果bmiHeader.biBitCount=24,win32里用画图软件看,可以看到。
        如果bmiHeader.biBitCount=8或4,也可以从win32里的画图软件看到,但是此时很明显存图时出现了问题,只有一个灰色背景,没有图像了。
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

7
 
现在我发现,如果如下修改,就可以在WIN32里看到位图了,不过右边始终存在黑框???
        //初始化位图宽高
        CRect  rectS;   
        GetDlgItem(IDC_STATIC1)->GetWindowRect(&rectS);
        /*width=(rectS.right-rectS.left);
        height=(rectS.bottom-rectS.top);*/
        width = GetDeviceCaps(hDCS,HORZRES)-200;
    height = GetDeviceCaps(hDCS,VERTRES)-100;
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用楼主 muyizhaoyang 的回复:
各位大侠,现在我把在wince环境下保存的bmp位图拷到硬盘里,然后想在win32环境下的程序里打开,使用的是LoadImage函数。为什么老是没有反应呢??如果把位图换成普通的bmp位图(就是在网上随便搜的),就可以。。
到底问题出在哪呢???
不知道楼主是否通过Active Sync 4.5进行转换过?如果没转换直接COPY过去的,感觉上是行不通的,没实验过,呵呵…
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 7 楼 wolfmvp 的回复:
引用楼主 muyizhaoyang 的回复:
各位大侠,现在我把在wince环境下保存的bmp位图拷到硬盘里,然后想在win32环境下的程序里打开,使用的是LoadImage函数。为什么老是没有反应呢??如果把位图换成普通的bmp位图(就是在网上随便搜的),就可以。。
到底问题出在哪呢???
不知道楼主是否通过Active Sync 4.5进行转换过?如果没转换直接COPY过去的,感觉上是行不通的,没实验过,呵呵…


Active Sync 4.5??什么意思?能不能说详细点?
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

10
 
每行像素占占用的字节数要是4的倍数。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

11
 
16位24位也有关系吧,有的时候2000下存的bmp在xp下也打不开,我遇到过这种情况
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 8 楼 muyizhaoyang 的回复:
引用 7 楼 wolfmvp 的回复:
引用楼主 muyizhaoyang 的回复:
各位大侠,现在我把在wince环境下保存的bmp位图拷到硬盘里,然后想在win32环境下的程序里打开,使用的是LoadImage函数。为什么老是没有反应呢??如果把位图换成普通的bmp位图(就是在网上随便搜的),就可以。。
到底问题出在哪呢???
不知道楼主是否通过Active Sync 4.5进行转换过?如果没转换直接COPY过去的,感觉上是行不通的,没实验过,呵呵…


Active Sync 4.5??什么意思?能不能说详细点?
就是通过Microsoft Active Sync 4.5移动设备同步中心这个工具来实现,我没有测试过不晓得能否行得通。
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

13
 
问题还是没有解决,不过我把保存时的位图拉大一点,就可以了。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表