4871|16

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

bmp图片显示(wince下)请高手指点和同仁们讨论 [复制链接]

想法是这样的:程序在运行的过程中,当功能需求要显示图片的时候,是从磁盘中读取图片文件,并生成播放列表,在从播放列表中依次显示,并且判断是某种格式的图片,当显示的是bmp格式,我要怎么做?这种格式的图片不是压缩的,在显示的时候需要什么操作,是否要像现实jpeg,png等格式的图片那么操作取编解码。

如果有好的结论和建议,我给100分。


谢谢!

最新回复

wince下,速度是个问题。  详情 回复 发表于 2009-10-26 18:41
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
SHLoadDIBitmap 就可以加载bmp图片了
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
调用api显示就行了,帮助文档中有
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 
BMP图片,API就可以直接操作的,毕竟都是MS的东东

但是,如果要对图片进行放大或缩小的处理,就没那么简单了
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 1 楼 reallyu 的回复:
SHLoadDIBitmap 就可以加载bmp图片了

同意
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

6
 
  如果只是做显示用,建议你用iimage,可以显示很多种格式的图片,jpg,bmp,png等等。用起来很简单的。
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

7
 
  构建BSP的时候,必须要把相应的组件加进去,不然iimage用不了得。例子的话,网上很多.
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 
BMP文件首址+偏移量0x36就是实际内容地址,可以创建一个DIB把内容直接memcpy过去,唯一就是要注意拷贝数据的顺序。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

9
 
绘制位图:
要将位图对象选入到屏幕设备环境中,然后才能复制到屏幕设备环境上。
位图的选择过程必须将可用的设备颜色与位图所需的颜色匹配,只有这样,位图才能在屏幕上绘制出来。
创建绘制环境是可以用CreateCompatiblieDC方法。
绘制位图可以用BitBlt函数
BOOL BitBlt(
  HDC hdcDest, // handle to destination DC
  int nXDest,  // x-coord of destination upper-left corner
  int nYDest,  // y-coord of destination upper-left corner
  int nWidth,  // width of destination rectangle
  int nHeight, // height of destination rectangle
  HDC hdcSrc,  // handle to source DC
  int nXSrc,   // x-coordinate of source upper-left corner
  int nYSrc,   // y-coordinate of source upper-left corner
  DWORD dwRop  // raster operation code
);
设置位图背景色可以用SetBKMode函数
如果想拉伸显示图片的话
可以用StretchBlt方法。

具体查看MSDN。希望对楼主有用。
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

10
 
可以用IMAGE组件看看
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

11
 
你如果想把代码逻辑写得简单一些,那就和其他格式的图片一样用IImage的API操作,IImage能够自动处理包括bmp的各种格式的图片的,但是这样会产生额外的炒作,性能会稍微差一些。
如果你希望性能好一些,那你就将bmp的情况单独出来,自己从文件中读取bmp数据,然后用GDI函数处理。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

12
 
你是用什么进行WinCE开发的?
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

13
 
下面这段代码应该可以显示JPG.BMP.PNG等图片格式
HBITMAP LoadImageFromFile(TCHAR * pFileImage)
{
    IImagingFactory *pImgFactory = NULL;
    IImage *pImageBmp = NULL;
    CoInitializeEx(NULL, COINIT_MULTITHREADED);     HBITMAP hResult = 0;
   
    if (SUCCEEDED(CoCreateInstance (CLSID_ImagingFactory, NULL,
       CLSCTX_INPROC_SERVER, IID_IImagingFactory, (void **)&pImgFactory)))
    {
ImageInfo imageInfo;
HRESULT hr = pImgFactory->CreateImageFromFile(pFileImage, &pImageBmp);
        if (SUCCEEDED(hr)&& SUCCEEDED(pImageBmp->GetImageInfo(&imageInfo)))
        {
       CWindowDC dc(0);
          CDC dcBitmap;
          dcBitmap.CreateCompatibleDC(&dc);
          hResult = CreateCompatibleBitmap(dc.GetSafeHdc(),imageInfo.Width, imageInfo.Height);
          HGDIOBJ hOldBitmap = SelectObject(dcBitmap, hResult);
   //note:内存不足的话,Draw操作可能会失败
          pImage->Draw(dcBitmap, CRect(0, 0, stImageInfo.Width, stImageInfo.Height), NULL);
          SelectObject(dcBitmap, hOldBitmap);
          DeleteDC(dcBitmap);
          pImageBmp->Release();
        }
        pImgFactory->Release();
    }
    CoUninitialize();
    return hResult;
}

 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

14
 
这段代码我是网上找的没验证过,楼主可以试一下,
不过我用过这个COM组件来显示过BMP.JPG格式的图片,代码应该跟上面的差不多吧,记不得了?
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

15
 
像是bmp可以用Windows api加载

其他压缩格式的就要用控件 或其他库了
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

16
 
引用 4 楼 wliaoc 的回复:
引用 1 楼 reallyu 的回复:
SHLoadDIBitmap 就可以加载bmp图片了

同意

同意
 
 
 

回复

96

帖子

0

TA的资源

一粒金砂(初级)

17
 
wince下,速度是个问题。
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表