zoukankan      html  css  js  c++  java
  • 图片浏览开发初步的问题

    时间:19:55 2010-9-1

    环境:
    开发环境:VS2008 +XAML2CPP.EXE + SWE 2 + BLEND 2
    运行环境:WINCE 6.0 R3
    硬件加速: DirectX

    背景:
        文件浏览器已经基本实现。接下应该实现图片浏览的功能。

    用户需求:
        在文件浏览的基础之上,文件浏览器要求能够显示图片的缩略图,
    用户点击图片文件,其就开始进行图片浏览了。

    浏览图片的两种模式:
    A. 手动:上一张,下一张的功能
    B. 自动播放:自动播放的开关,自动播放切换时间。

    今天暂时完善文件浏览器的图标显示图片的功能。

    图标控件: 自定义控件,其要显示文件的图标与文件名,且能够根据文件类型正确的显示相关图标,如:图片文

    件就要显示图片的缩略图。

    此功能应该谁来完成了:
    得到文件名,==》判断文件名类型,==》 根据类型显示相应的图标。(策略模式应用)

    其是由图片控件来完成==》 其的接口只要是一个图片文件名。

    其是由CONTROLLER来控制完成 ==》 图片控件其要提供操作接口,如SetImage()。

    STEP 1:
        从图片文件互图片控件。

    MS 的SWE开发人员其是怎么样实现的呢。
    图片类型多种,怎么样提供统一的操作接口给用户呢.
    策略模式 + 工厂函数。

    这些操作接口与IMAGE CONTROL 之间保持什么样的联系呢。其之间使用了什么样的设计模式。

    如:
    其的用户操作接口是什么呢. 思考:是什么,有什么,怎么样使用,其为什么只要这些
    图片源(source): 其对于图片源的操作有,GET,SET; 其对于图片源是直接文件名,还是要进行规范呢。

    伸拉模式设置(stretch):
    retrieves a value that describes how an image should be stretched to fill the destination rectangle.
    其的返回值是怎么样设置。同样也有SET,GET;

    事件:
    AddImageFailedEventHandler
    RemoveImageFailedEventHandler

    ImageFailed 其包括哪些情况:是否包括从图片文件加载到内存当中呢

    控件与源之间的关系

    silverlight for windows embedded uses bitmap caching.Therefore, if a requested image was requested at a
    previous time .the cached and decoded image is used again instead of starting a new request from the URI.

    其是使用先缓存与解码的工作方式。 所以在显示流程上要求用户实现这一步,然后再设置IMAGE CONTROL 的源


    包括:规范。
    任何类型的图片文件,其最终要变成bitmap

    图片到控件

    图片文件 --》IXRBitmapImage ==>(IXRImage) IMAGE CONTROL
    IXRBitmapImage:( class IXRBitmapImage : public IXRImageSource)
    this class represents a bitmap image that is used as part of an application user interface.
    ( 其难道可以直接显示吗而不要通过IXRImage control)  或者: 位图其也是要通过控件才能够显示。

    IXRImage: ( class IXRImage : public IXRFrameworkElement)
    this class represents a control that displays an image

    IXRImageSource:
    其是为了统一操作接口。其是使用了什么样的设置模式呢.  策略模式吧

    This is an object type that is used in the method signatures for
    IXRImage::GetSource,IXRImage::SetSource
    IXRImageBrush::GetImageSource, IXRImageBrush::SetImageSource.

    ==> IXRBitmapImage  其是IXRImageSource 的子类。

    图片文件 ==》cached (IXRImageSource 的实例:IXRBitmapImage) ==> 图片控件(接口:IXRImageSource)

    IXRIamge

    随便学习一下方法的当中字符串的设置:
    virtual HRESULT STDMETHODCALLTYPE GetUriSource(
        WCHAR* *pUriSource
    ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetUriSource(
        const WCHAR* pUriSource
    ) = 0;

    得到 使用指针的指针 没有且不能加const
    设置使用指针且添加了一个 const 且类型是使用  WCHAR 强制,而不是TCHAR 这样不确定。

    图片文件 ==》 到cached要使用LoadImage之类的函数,或者使用Image组件,这与在MFC当中是一样的.

    IXRBitmapImage的成员方法:

    virtual HRESULT STDMETHODCALLTYPE SetBitmapSource(
        HBITMAP hBitmap
    ) = 0;

    ==》 从图片文件到地于图片进行操作其要经历的过程。
    1. cache and decoded 从而得到 HBITMAP。
    其为什么要这样一步呢。
    其是为了统一接口,因为图片的格式是多种的,包括现有的和未来的。但其只要解码,得到HBITMAP  其就可以

    被SWE所操作了。
    这一步是变化的,所以SWE将其独立出来,且一个统一的接口:HBITMAP.

    2.对于图片文件进行操作处理。
    大家使用WIN32编程就知道,我们操作对象是使用HBITMAP,对于图片的操作许多种:放大,缩略,旋转...。
    其都要求对于HBITMAP进行的操作。
    MS的SWE开发人员其就是这样设置的。
    ==> IXRImage 其只是为图片提供一个显示与操作的平台。而没有提供解码的功能的,所以要想显示

    (JPEG,GIF,PNG) 等格式的图片,自身0S当中要提供一些解码DLL, 幸好在WINDOWS 当中提供一个IMAGE

    LIBRARY 其能够解析现在最常用的图片格式,当然其他的图片格式,要用户自己提供解码DLL。

    其为什么不将HBITMAP直接与IXRImage进行联系。而是在中间加一个IXRImageSource.
    使用IXRImage 其只要针对于IXRImageSource就可以了。

    其除了为提高灵活性与解耦,还是什么呢, 其属于哪一种设计模式呢。

    具体操作实现

    PAGE:
    http://geekswithblogs.net/WindowsEmbeddedCookbook/archive/2009/11/18/silverlight-for-windows-embedded-tutorial-step-3.aspx

    http://aimidas.spaces.live.com/?_c11_BlogPart_BlogPart=blogview&_c=BlogPart&partqs=cat%3DSilverlight%2520for%2520Windows%2520Embedded

     

    essential sentence:
    to be able to load and use image files( jpegs ,bmps,gifs) inside your application you should include the imagelibrary components in your OSDesign.


    ==>在MFC当中,就是使用此图片组件来编写图片浏览器的。

    To display an image inside your application user interface you have to use the image control of silverlight.


    ==> 显示图片使用IMAGE CONTROL(IXRImage), IMAGE CONTROL( IXRImage)其是用于显示图片的 。

    操作图片的模型:

    图片文件 ==> hbitmap ==> IXRIMageSource INSTANCE(如:IXRBitampImage) ==> IXRImage( image control)

    定义对象:
    IXRBitmapImagePtr img01;

    创建对象
    IXRApplication::CreatObject()

    load the bitmaps and store them inside the IXRBitmapImagePtr objects。
    if( FAILED( retcode = img01->SetUriSource(L("\\Windows\\ img01.jpg"))))
    ==> 解析了这样几个问题:
    1. 从图片到HBITMAP到IXRImageSource,
    其都由IXRBitmapImage 所包括了,用户只要提供了文件的完整路径了,
    2.解释了为什么只要IXRImageSource

    其SWE的框架当中,大量的使用了工厂模式,这应该是我们值得思考与学习的

    同时IXRBitmapImage  其提供了IXRBitmapImage::SetBitmapSource(HBITMAP hBitmap)的方法,其能够方便未知

    图片格式的显示。

    问题:
        ATL:CString  向const WCHAR * 转换。
    解法:
        只要强制类型转换就可以了,因为CString 重载了const WCHAR* 方法
        如: CString str;
            (const WCHAR*) str;

    问题:
        纠结于类与类之间的结构组织,在程序当中具体的表现为:自定义的一个控件,且有一个相联系的

    MODEL类,此MODEL其要完成一些什么样的任务呢,其与CONTROLLER之间的联系。自定义控件其要完成一些什么样工作呢。
    解法:
        现打算这样执行: 自定义控件其提供操作控件的元素的接口,不进行任何逻辑处理。
    此MODEL进行业务逻辑处理,而CONTROLLER 其进行对象的创建与任务的分配,流程的调遣,
    重要原则:首先在VERSION 1.0 做出来,然后再谈功能与性能的增加与提高,否则只是白白的浪费时间.

    问题:
        error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int   
    解法:
        其已经说明了错误的原因: 缺少类型说明符 ,如方法的返回值类型是否写了呀

     

    essential tips:
    the main initialization will be performed inside our init method( it's not a good idea to put this kind of initialization

    code inside the constructor because some API calls may fail  and you don't have a way to return an error code

    from a c++ constructor.

     

    其与视频控件之间有联系,
    在下来的视频播放器的实现当中,对于视频播放的控件:

    IXRWin32Control + DirectShow,

     

    完成实现了图片缩略图的显示

    图片浏览器_step_one

     

    接下要实现图片浏览的功能

  • 相关阅读:
    非同名数据库导入sql
    mybatis中的异常
    使用MyBatis时为什么Dao层不需要@Repository
    springboot项目启动后执行一段程序的方式
    构建SpringBoot项目
    springboot项目添加webapp目录
    springboot项目启动异常
    使用restTemplate出现的异常
    Spring中Bean的属性赋值@Value()---使用类配置的方式
    使用BeanUtils复制Java对象
  • 原文地址:https://www.cnblogs.com/pengxinglove/p/1816130.html
Copyright © 2011-2022 走看看