- 博客(71)
- 收藏
- 关注
原创 sizeof struct为什么总是一个问题
在Win32 Crypto API里面很常用的一些接口如CryptImportKey, 会引入一些特定的数据结构作为key的内容和说明。我们在很多的sample里面看到了类似的定义,从而也发现了很诡谲的问题 struct KeyBLOB { BLOBHEADER header; DWORD cbKeySize; BYTE
2010-02-24 22:25:00 1600 1
原创 Symbian环境搭建,高版本ActivePerl兼容性解决方案(5.10.0)
最近要搭建一个定制的Symbian的开发环境,由于License的原因很多东西受到限制。所以拿到的Carbide是Nokia提供的2.1绿色版本:)(第一次用到),Activeperl也是,需要自己执行一个BAT来设定环境变量。这样就由不得我们自己去下载传统的ActivePerl-5.6.1.635或者ActivePerl-5.6.1.638,然后非常顺理成章的事情发生了。我拿到的
2009-11-13 20:25:00 2038
原创 面试题之最长回文字串
这个问题也是一个很有名的问题了,在pongba的群里面问起过,还有人引出了suffix tree来解决这样的问题,这个就是最长回文字的问题How will you find the longest palindrome in a string? I.e. if the string is XMADAMYX, Your code should print MADAM这个问题用后缀树解决
2009-10-13 21:24:00 3000 4
原创 面试题之二叉树最近公共父亲节点
很流行的一个问题,常见于各种面试中,http://fayaa.com/tiku/view/16/这里有一个很好的汇总.找寻二叉树中两个节点的公共父节点中最近的那个节点 情况1. 节点只有left/right,没有parent指针,root已知情况2. root未知,但是每个节点都有parent指针
2009-10-12 21:24:00 7910 10
原创 面试题之二叉搜索树的中位数
这个问题不算是很常见的问题,基本上在中文的论坛社区没有看到过,遇见这个是因为偶尔在http://www.ocf.berkeley.edu/~wwu/cgi-bin/yabb/YaBB.cgi 上面注册了账号而看到的,题目如下:Given a BST (Binary search Tree) how will you find median in that? C
2009-10-11 17:30:00 7320 7
原创 面试题之2个有序数组求合并后的中位数
问题出处: http://fayaa.com/tiku/view/114/ 2个有序数组求合并后的中位数 第一步:假设两个有序数组(已经各自排序完成了)长度相等,试写函数找出两个数组合并后的中位数。第二步:假设两个有序数组长度不等,一样的求出中位数 解析: 这个题目看起来非常简单。第一题的话: 假设数组长度为n, 那么
2009-09-23 14:23:00 16047 10
原创 面试题之原地倒转字符串
题目出自:http://fayaa.com/tiku/view/3/嗯,照旧,据传说是MS/Google等等IT名企业的面试题:给定一个字符串,比如:the quick brown fox jumps over the lazy dog.请设计程序将这个句子倒转,即,完成以后如下:dog. lazy the over jumps fox brown qu
2009-09-23 00:13:00 2471
原创 面试题之寻找丢失的数字
题目来源:http://fayaa.com/tiku/view/2/ 据传说是MS/Google等等IT名企业的面试题:有一组数字,从1到n,中减少了一个数,顺序也被打乱,放在一个n-1的数组里请找出丢失的数字,最好能有程序,最好算法比较快BTW1: 有很多种方法的哦,据说O(n)的方法就不止一种BTW2: 扩展问题,如果丢失了2个数字呢?B
2009-09-22 22:00:00 5994
原创 写应用程序的要求和库的要求是断然不同的--- 有感于STL insert_n
在跨平台的大计上, 在Symbian上你找不到STL,在Windows Mobile,Brew上也没有RArray。有显然的一点就是你需要重新写一个类似的容器来满足类似的需求,在这里强烈地感觉到写应用程序的要求和Library是断然不同的。我们在std::Vector里面有一些常用的insert, resize等操作通常有一个共同的内部实现函数, 在MS STL里面我们看到的是_Insert_
2009-09-22 10:58:00 2485
原创 打开文件对话框GetOpenFileName Win32, PPC, Smartphone上的异同
前些日子看到有人问这个如何在Mobile上打开打开文件对话框,在c#里面我们知道有个OpenFileDialog, 那是相当的方便,如果要在WinCE的native API下面做也是可以的,这里就用到了GetOpenFileName的接口(GetSaveFileName一样的参数就不说了)。具体的用法看看这里的实现: OPENFILENAME ofn;
2009-09-07 21:48:00 3041 1
原创 双线性插值(Bilinear interpolation)的图像旋转在mobile上面的C++实现
在图像拉伸了以后, 很自然地我们想把图像的旋转也做进来。我们找来了图像旋转的公式: X = X cosθ - Y sinθ;Y = X sinθ + Y cosθ; 这个图像公式大家在高中数学课都是会算滴。 然后我们要扩展一下因为我们不是在原点做旋转,我们要围绕原来的图片中心做旋转, 那么我们假定原来的图像中心是 oldCenterX, oldCenterY
2009-08-20 12:06:00 8501 15
原创 Windows Mobile 编译错误解析:LNK2019: unresolved external symbol __GSHandlerCheck
一再看到有人在CSDN论坛上面问, 我的PPC/SMARTPHONE的SDK example为什么编译不过,我没有做过任何的修改啊!然后出现的错误都是类似的 LNK2019: unresolved external symbol __GSHandlerCheck 的错误,然后出了错误, 大抵都失去了对Microsoft的信任:)那问题的缘由处在什么地方呢?其实在MSDN Blog上面有对于类似问题
2009-08-13 13:21:00 2437
原创 双线性插值(Bilinear interpolation)的图像拉伸在mobile上面的实现
在进入频域变换之前, 我们还是轻松一下,再搞点平面上的变化来看看。这把选了一个双线性插值(Bilinear interpolation)来实现是源于看到了csdn上别人的问题, 权且实现一个函数,方便大家的使用吧。双线性插值简单的说,就是扩展了之后的图像像素坐标映射回原来的坐标空间的时候, 如果出现了没有对应到整数点的情况。这时候需要做2次线性的插值计算出新的坐标的像素值,比如说:
2009-08-11 15:51:00 10206 9
原创 谈谈 C++ 的私有继承 (Private Inheritance) 在跨平台(Cross Platform)上的妙用
当前mobile平台上主流的C++开发环境有Windows Mobile, Symbian, Brew, Linux等等, 为了加速应用程序在各个平台上的开发, 通常的办法是做一个跨平台的框架(Cross Platform Framework)。那样很多平台无关的代码共享无疑加速了开发,现在关键的问题是如何做到这样平台抽象层。我们看到过很多和下面类似的代码:/*** salThr
2009-08-04 10:39:00 2353 1
原创 图像锐化 边缘检测的一些基础知识
互联网兴起, 生活节奏飞速,快餐成了favorite。理论学习也受到了巨大的冲击,一些不明所以的冰冷的公式和整段可以运行的代码是很多人的最爱。使得原本应该沉静的软件开发变得异常浮躁,(当然很多博客也成了帮凶:))今天就要融化冰雪, 说说代码以外的东西,说说冰雪初成的原因。 锐化的概念,我们从锐度开始谈起。很多人都以为锐度就是Sharpness,其实在数字图像的领域, 这个锐度更准确的说法是
2009-07-29 14:04:00 12834 5
原创 图像锐化算法 C++ 实现
之前一段我们提到的算法都是和平滑有关, 经过平滑算法之后, 图像锐度降低, 降低到一定程度, 就变成了模糊。 今天我们反其道行之, 我们看看锐化是怎么做的。 这里的锐化, 还是的从平滑谈开去。我们先来观察原来的图像和平滑图像的区别: 原图 raw 减去模糊图 blur
2009-07-08 13:41:00 23655 11
原创 高斯平滑 高斯模糊 高斯滤波器 ( Gaussian Smoothing, Gaussian Blur, Gaussian Filter ) C++ 实现
发展到现在这个平滑算法的时候, 我已经完全不知道如何去命名这篇文章了, 只好罗列出一些关键字来方便搜索了.在之前我们提到过了均值滤波器, 就是说某像素的颜色, 由以其为中心的九宫格的像素平均值来决定. 在这个基础上又发展成了带权的平均滤波器, 这里的高斯平滑或者说滤波器就是这样一种带权的平均滤波器. 那么这些权重如何分布呢? 我们先来看几个经典的模板例子:尝试了使用这些滤波
2009-07-07 18:43:00 75265 21
原创 混合中值滤波器 ( Hybrid Median Filter ) C++ 实现
在中值滤波器和均值滤波器之后, 我们看到是中值滤波器的改版, 这个名字我实在不好把握 Hybrid Median Filter实在不知道翻译成什么比较妥当.只好沿用了混合动力车里面的混合二字, 姑且把这种滤波器命名为混合中值滤波器. 这个滤波器的工作流程较之原先有些繁琐, 来看看这张图图截的有些模糊, 但是还是看出了大致的流程, 首先当前像素的上下左右和自身取中值, 然后左上右
2009-07-07 11:49:00 6885 2
原创 中值滤波器 ( Median Filter ) C++ 实现
有了前面一个均值滤波器的基础, 在看中值滤波器就不是很容易继续了。均值滤波是像素周围的3*3的像素做平均值操作, 那么中值就是在3*3中的像素中寻找中值。 来看这样一个描述图(无图无真相)这把可以清晰地看到, 这里有6,2,0,3,97,4,19,3,10这些像素, 然后中间的这些像素值就被这些像素的中位数也就是中值取代了。为了满足和前面一篇文章的格式相对应, 我们马上进入下
2009-07-06 15:41:00 39771 14
原创 均值滤波器 ( Mean Filter ) C++ 实现
原来是不做图像处理这块的, 所以对这里的专用名字不是特别感冒, 滤波器听来玄而又玄。真正拿来看了之后就不过尔尔了, 这把拿了一个均值滤波器的例子来做记录, 希望可以依次把一些median filter, gaussian blur都拿来说说。好吧言归正传, 这里就具体说说均值滤波器是什么东西吧。其实这个东西就是在图像处理的时候, “把每个像素都用周围的8个像素来做均值操作”, 比如说这里有
2009-07-06 14:59:00 30821 10
原创 Wellner 1993快速自适应的图像二值化方法的提高 (Derek Bradley and Gerhard Roth 2007)
前面一种方案实际上还是存在一定的问题的, 就是这个避重就轻的初始g(n)值127*s(127表示0-255之间的中间值), 这个东西带来的最直接的问题就是边缘的效果在这个算法下是不咋地的。 其实从这个所谓的"Wellner 1993", 后人又做了很多的改进, 使之效率更高, 效果更好。比方说这个Derek Bradley和Gerhard Roth搞的这个所谓 Adaptive Threshold
2009-06-18 15:54:00 10336 14
原创 一种快速自适应的图像二值化方法介绍 (Wellner 1993)
在手机模式识别的时候, 我们首先viewfinder里面拿到的frame通常是RGB的或者YUV的, 如果我们需要用来做模式识别的话, 通常需要首先把彩色图首先转化成灰度图. 对于RGB图像而言, 网上有充足的公式, 比如Y = 0.299R + 0.587G + 0.114B 等等. 如果是YUV的话, 直接用Y就是灰度图了. 顺带说一句, 这种灰度图通常我们用.raw文件来表示, 用photo
2009-06-12 21:03:00 11678 5
原创 Symbian 位图CFbsBitmap 90度旋转
在做Symbian Camera应用的时候,我们发现, 在某些特殊的手机上. Preview以后拿到的那些Frame也就是位图CFbsBitmap是旋转过的. 比方说N75上, 比方说我在N96的一个原型机上也看到. 碰到这种情况. 我们只能手动的进行旋转. 旋转完成后再画就基本上可以了. 但是旋转有很多种, 如何旋转呢?从Symbian OS v7.0开始就有了CBitmapRotator这
2009-06-10 20:25:00 2059 1
原创 Windows Mobile 中的键盘钩子实战
在需要用到SOFT1和SOFT2两个按键的时候, 也尝试了各种方案, 最后还是选个钩子函数, 但是在使用的过程中还是出现了一些问题的, 一些解决了一些还没有。下面有以下网上很多的实现。 且看这个winceKBhook.h#ifndef _WINCE_KB_HOOK_H#define _WINCE_KB_HOOK_H//used for passing to SetWindowsHo
2009-05-25 15:08:00 3146 3
原创 Windows Mobile 常用的信息的获取
通常在网络协议制定的时候,经常需要客户端能够生成或者获取一些独特的不会重复的ID,辅之以一些平台,版本信息来作为协议的一部分,后台的服务器可以根据这些信息来做统计处理. 这里就对这些常用的信息的获取办法做一个汇总. 1. 开发平台. 这里需要知道的是PPC还是Smartphon. 其实这个和协议的关系不大, 但是和客户端开发比较密切. smartphone和ppc对clientRect的定
2009-05-17 09:28:00 3113
原创 Windows Mobile 上常见的 DirectShow 链接错误
最近在Mobile上搞Camera的时候碰到了千奇百怪的链接错误,在这里记录一下。 第一步最简单的错误。 这个错误类似于如下的error messsage:1>cameraEmpty.obj : error LNK2001: unresolved external symbol IID_IVideoWindow1>cameraEmpty.obj : error LNK2001: u
2009-05-14 16:21:00 6062 8
原创 如何用程序运行CAB安装文件
最近这个东西很多被问及,软件动态升级的时候可能可以用到,在这里做一下记录。就知道的方法有2个, 一个是通过ShellExecuteEx直接运行对应的CAB文件。一个是调用CreateProcess用wceload来调用这个CAB。 两个方法都可以,下面是写的测试程序中的代码: case ID_HELP_INSTALL1: { // Specify an
2009-05-04 12:41:00 4818 1
原创 Windows Mobile下画透明PNG图片的解决方案
最近一直看到有人在问这个PNG的东西,正好在工作的时候也用得到,就找了几个图片试了一下.从wince开始引入了IImage的支持,这样我们可以用IImage来load 这些图片. 大致的流程很多地方都有:CoCreateInstance创建IImagingFactory, 然后用CreateImageFromFile创建IImage的接口,最后把这个IImage用draw的接口画到DC.但是问
2009-04-29 23:44:00 5232 11
原创 在PPC和Smartphone上创建自己的Menubar
其实这个是一直想做的事情, 要写一个Menubar的控件,有了Graphics的抽象层,有了Menubar就可以让这个控件同时工作在Symbian和Windows Mobile上面了. 做这个控件第一件事情就是把系统的Menubar去掉!在PPC上面还是有点问题的. 当然不显示这个Bar比较简单,你只要不调用SHCreateMenu来实例化应该差不多了.但是这个输入法还是时不时地跳出来
2009-04-24 20:11:00 1333
原创 win32下 如何定位内存泄漏
在mobile平台上写代码久了,平时的时候都是自己给出检索内存泄漏的方案的。但是在win32下的开发,内存泄漏的检索式如此的简单。在windows下,定义有这样一个宏_CrtDumpMemoryLeaks。它可以帮助你在任何地方打印出当年的内存使用情况,比如说当前有多少内存使用了没有被释放掉。比如说你有这样一段程序:int main (void){ int* p = new int
2009-04-23 13:50:00 17007 3
原创 Brew Mobile Platform + Flash Development 初探
brew mobile phone推出有一段时间了,在模拟器上也尝试了一点新的东西, 比如他的Flash开发就是亮点.虽然到现在我们没有拿到手机但是可以看得出,这个Flash开发还是非常强大的. 下面先转载一段brew mp上的关于环境搭建的部分内容. This section explains the installation procedure for setting up a Bre
2009-04-14 23:36:00 3157 2
原创 这一夜我们只说CreateCompatibleDC
需要在Windows Mobile和Symbian OS上搭一个抽象层来对GDI有个基本的封装.定义了一个Graphics的类.原意是让他每次画图的时候在memory DC上画,最后update的时候可以整体把Memory DC bitblt到目标HDC上去.下面就是一个简要的initGraphis的函数.粗粗的看好像平平无奇. SBool Graphics::initGraphics(H
2009-04-14 20:34:00 7288 1
原创 贪心算法(Greedy Algorithm)之最小生成树 克鲁斯卡尔算法(Kruskal's algorithm)
克鲁斯卡尔算法(Kruskals algorithm)是两个经典的最小生成树算法的较为简单理解的一个。这里面充分体现了贪心算法的精髓。大致的流程可以用一个图来表示。这里的图的选择借用了Wikipedia上的那个。非常清晰且直观。 首先第一步,我们有一张图,有若干点和边如下图所示:第一步我们要做的事情就是将所有的边的长度排序,用排序的结果作为我们选择边的依据。这里再次体现了贪心
2009-04-10 12:06:00 22826 1
原创 《C++ Template. The Complete Guide》笔记之四 Tricky Basics
这里实际要说到的是一些散乱的比较tricky的概念。不想一一列举了,但是有2个点想拿出来说一说。第一个就是typename,这个关键字用来告诉编译器,后面紧跟的东西是一个类型而不是其他什么东西。假定你有一个Map的类,需要有2个模板参数Key和Value。template class Map{ public: struct MapPair {
2009-04-07 11:45:00 1344
原创 贪心算法(Greedy Algorithm)之霍夫曼编码(Huffman codes)
其实这个霍夫曼编码本身不是一个很难的技巧(也是霍夫曼在期末考试的过程中想出来的方案:)),因为中间用到了贪心的思想,所以也在这里列举了出来。这个问题本身在计算机系的很多教材上都出现过。这里权且记录下来。霍夫曼的编码是这样的。假设我有一组带压缩的文本,里面各个字符出现的频率不同,现在需要对他们进行压缩。比如 假设我们有100,000个字符的文本.最直观的压缩办法就是原来每个字符要8个
2009-03-19 13:41:00 4533 1
原创 贪心算法(Greedy Algorithm)之活动选择问题(Activity-Selection Problem)
活动选择问题是《算法导论》里面关于贪心算法的第一个问题。这个问题是这样的。我们有一组活动,每个活动都有一个开始时间Si和结束时间Fi。如下图:每个活动都共享同一个公共的资源(比如教室等)所以同一时间只能有一个活动。现在的问题就是要在指定的时间内让举办的活动数量做大。这个问题是贪心算法一个典型的应用。说到贪心,贪心基本解决问题的方案就是 #1.尽可能在局部找到一个最优的解 #2然
2009-03-18 13:39:00 15856 1
原创 Camera: Brew中的龙潭虎穴
Camera慢慢的成为手机的标配之一的时候给手机编程带来的麻烦也越来越大.尤其是能有一段通用的代码在各种不同屏幕尺寸手机上顺利运行更是非常困难。这次就谈谈Brew平台的Camera编程. 这次只讲Preview和Snapshot模式.Movie我们暂且不谈。和很多Brew接口很类似 Camera接口需要createinstance, 然后SetProperties(包括Size, Preview
2009-03-12 10:48:00 1844 1
原创 动态规划 (Dynamic Programming) 之 背包问题合辑 (Knapsack, Subset Sum, Partition and change making problem )
背包问题一直是动态规划中的经典问题。这个问题又分成01背包,完全背包,多重背包,分组背包等等。。我在这里只记录下01背包(0-1knapsack)和完全背包(unbounded knapsack)。背包问题的简单描述就是有一个背包和一堆物品。每个物品有自己的大小和价值。我们希望在一个特定容量的背包中放入价值尽可能大的物品。01背包呢就是每个物品最多只能放一次,也就是要么放要么不放,所以被称为01背
2009-03-04 11:02:00 17957 9
原创 C++中的宏和函数名称的冲突 STL+windows.h
最近在写代码的时候总是发现在#include"windows.h"了以后经常用STL中的min.max函数出现编译错误。但是自认为代码是没有错误的。下面就是相关的代码: // testMacro.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #i
2009-03-03 12:21:00 4635
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人