使用AGG 来进行GIS地图描画
来源:互联网 发布:惠普打印机网络连接 编辑:程序博客网 时间:2024/04/28 02:22
准备把这个做成个系列。 大约有4-5个主题。分几个方面,主要介绍几个主流工具,今天先写一个
1 为什么要AGG和SDL?
SDL 是网络上一个有名的开源的,2维图像库,SDL的结构清晰易懂,代码结构非常紧凑。
SDL结合了alpha Blend
bitBit
图象格式的存和取
基本库函数
事件,信号量控制
GUI和图象的缩放。
SDL简化了对图象因为相数位不同而引起的,复杂操作。而依靠SDL的多平台和系统支持,你以后的图像操作可以很容易的独立在系统层。
例子: 通过SDL_surface来屏幕画一个点的函数
//混合点RGBA
void
_PutRGBAPixel(SDL_Surface *s, Uint8 *pDst, Uint8 sR, Uint8 sG, Uint8 sB,
Uint8 sA, BLEND_FUNC func)
{
Uint32 cDst;
Uint8 dR, dG, dB, dA;
int alpha = 0;
cDst = _GET_PIXEL(s, pDst);
if ((s->flags & SDL_SRCCOLORKEY) && (cDst == s->format->colorkey)) {
_PUT_PIXEL(s, pDst, SDL_MapRGBA(s->format,
sR, sG, sB, sA));
} else {
SDL_GetRGBA(cDst, s->format, &dR, &dG, &dB, &dA);
switch (func) {
case _ALPHA_OVERLAY: alpha = dA+sA; break;
case _ALPHA_SRC: alpha = sA; break;
case _ALPHA_DST: alpha = dA; break;
case _ALPHA_ONE_MINUS_DST: alpha = 1-dA; break;
case _ALPHA_ONE_MINUS_SRC: alpha = 1-sA; break;
}
alpha = (alpha < 0) ? 0 : (alpha > 255) ? 255 : alpha;
_PUT_PIXEL(s, pDst, SDL_MapRGBA(s->format,
(((sR - dR) * sA) >> 8) + dR,
(((sG - dG) * sA) >> 8) + dG,
(((sB - dB) * sA) >> 8) + dB,
(Uint8)alpha));
}
}
//画透明点
void DrawRGBAPixel(SDL_Surface *surface, int x, int y, Uint32 color)
{
Uint8 r,g,b,a;
int bpp = surface->format->BytesPerPixel;
Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;
if(((Uint16)x >(Uint16)surface->w)||((Uint16)y >(Uint16)surface->h )) return;
SDL_GetRGBA(color, surface->format, &r, &g, &b, &a);
_PutRGBAPixel(surface,p,r,g,b,a,_ALPHA_OVERLAY);
}
case 2: case 3: case 4:
//画单点
void DrawRGBPixel(SDL_Surface *surface, int x, int y, Uint32 pixel)
{
int bpp = surface->format->BytesPerPixel;
Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;
if(((Uint16)x >(Uint16)surface->w)||((Uint16)y >(Uint16)surface->h )) return;
switch(bpp)
{
case 1:
*p = pixel;
break;
*(Uint16 *)p = pixel;
break;
if(SDL_BYTEORDER == SDL_BIG_ENDIAN) {
p[0] = (pixel >> 16) & 0xff;
p[1] = (pixel >> 8) & 0xff;
p[2] = pixel & 0xff;
} else {
p[0] = pixel & 0xff;
p[1] = (pixel >> 8) & 0xff;
p[2] = (pixel >> 16) & 0xff;
}
break;
*(Uint32 *)p = pixel;
break;
}
}
AGG 是著名的开源矢量库。效率很高,速度快,模扳操作,也容易扩展。 今天有事情明天继续写。
- 使用AGG 来进行GIS地图描画
- ArcGis for Flex---Flex4.0之使用DropdownList控件来切换GIS地图map
- [翻译]AGG 之适应性细分法描画贝塞尔曲线(上)
- [翻译]AGG 之适应性细分法描画贝塞尔曲线(下)
- 继续对AGG svg_viewer进行改进
- GIS: Openlayer 中使用SLD动态改变地图
- 使用catalog进行地图发布
- GIS地图基础知识--入门教程
- GIS地图工具(一)
- gis地图切片公式
- GIS 地图相关资料
- 转载 GIS地图知识
- GIS地图放大镜
- 地图开发室内gis
- 地图离线GIS解决方案
- 怎样使用GIS 技术来编制土地利用规划图
- 怎样使用GIS 技术来编制土地利用规划图
- 使用开源桌面GIS软件(uDig)进行投影变换
- 中小网站服务器租用还是托管合适?
- 時間控件(可多時間選擇)
- 香港服务器低价租用内幕
- 关注openkm
- IE下的FIREBUG,加入代码到网页中即可。
- 使用AGG 来进行GIS地图描画
- 整顿风暴后网址导航将何去何从 如何孕育重生
- 悼念一个伟大的公司——Sun
- 笑话
- 時間控件—接上篇
- 图像处理笔记--图像增强
- 基于RL-TCPnet的Web Server应用
- 控件使用
- Women talk more than men