图片浏览开发初步的问题

时间: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

 

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

原文地址:https://www.cnblogs.com/pengxinglove/p/1816130.html