PIE-SDK For C++Alpha通道数据渲染

1.功能简介

   在计算机图形学中,一个RGB颜色模型的真彩图形,用由红、绿、蓝三个色彩信息通道合成的,每个通道用了8位色彩深度,共计24位,包含了所有彩色信息。为实现图形的透明效果,采取在图形文件的处理与存储中附加上另一个8位信息的方法,这个附加的代表图形中各个素点透明度的通道信息就被叫做Alpha通道。

         Alpha通道使用8位二进制数,就可以表示256级灰度,即256级的透明度。白色(值为255)的Alpha像素用以定义不透明的彩色像素,而黑色(值为0)的Alpha通道像素用以定义透明像素,介于黑白之间的灰度(值为30-255)的Alpha像素用以定义不同程度的半透明像素。因而通过一个32位总线的图形卡来显示带Alpha通道的图形,就可能呈现出透明或半透明的视觉效果。

   在遥感图像中选择Alpha通道可以使图像叠加显示的时候不会被覆盖,下面就介绍PIESDK如何进行Alpha通道渲染,一种是直接在属性界面的渲染方式选择Alpha通道也即透明度通道进行渲染;另外一种就是利用代码进行实现。本文讲述后者。

2.功能实现说明

2.1 栅格数据介绍

   常见的栅格数据文件格式包括tifftifimgdat等,它们采用文件的方式存储相关信息,一个Tiff数据的文件结构如下所示(GF1数据为例):

[Tiff数据文件结构]

编号

后缀

文件说明

1

.tiff

基本文件,存储栅格数据的像素、坐标系、坐标等信息;

2

.jpg

可选文件,栅格数据的示意图;

3

.rpb

可选文件,坐标参数文件;

4

.xml

可选文件,数据相关信息文件;

5

.ovr/aux.xml

可选文件,栅格数据金字塔文件;

[Tiff数据文件结构说明]

2.2 实现思路及原理说明

第一步

根据文件路径打开栅格数据集;

第二步

设置Alpha通道索引并设置可用

第三步

进行拉伸渲染

第四步

结果显示

2.3 核心接口与方法

接口/

方法/属性

说明

SysDataSource::DatasetFactory

OpenRasterDataset

打开栅格数据集

SysCarto::RasterRGBRenderPtr

SetAlphaBandIndex

设置Alpha通道索引

SetUseAlphaBand

是否使用Alpha通道

2.4 示例代码

数据路径

百度云盘地址下/PIE示例数据/栅格数据/04.World/World_Yun.tif

视频路径

百度云盘地址下/PIE视频教程/03.数据加载/13.Alpha通道渲染.avi

示例代码

/// <summary>

///增加Alpha通道的数据渲染

/// </summary>

void PIEMainWindow::On_ActionOpenComplexDataset_Triggered(bool checked)

{

    QString worldPath = "D:/PIESDK/PIE示例数据/栅格数据/04.World/World.tif";

    QString yunPath = "D:/PIESDK/PIE示例数据/栅格数据/04.World/CC_2018082615.tif";

 

    //创建数据集

    SysDataSource::ComplexRasterDatasetPtr complexRasterDataset = new SysDataSource::ComplexRasterDataset();

 

    //打开数据集

    SysDataSource::RasterDatasetPtr worldDataSet = SysDataSource::DatasetFactory::Instance()->OpenRasterDataset(worldPath,SysDataSource::OpenMode::GA_ReadOnly);

 

    SysDataSource::RasterDatasetPtr yunDataSet =     SysDataSource::DatasetFactory::Instance()->OpenRasterDataset(yunPath,SysDataSource::OpenMode::GA_ReadOnly);

    //写入波段

    complexRasterDataset->AddRasterBand(worldDataSet, 0);

    complexRasterDataset->AddRasterBand(worldDataSet, 1);

    complexRasterDataset->AddRasterBand(worldDataSet, 2);

    complexRasterDataset->AddRasterBand(yunDataSet, 0);

 

    SysCarto::RasterRGBRenderPtr rgbRenderPtr = new SysCarto::RasterRGBRender();

    rgbRenderPtr->SetRedBandIndex(0);

    rgbRenderPtr->SetGreenBandIndex(1);

    rgbRenderPtr->SetBlueBandIndex(2);

    rgbRenderPtr->SetAlphaBandIndex(3);

    rgbRenderPtr->SetUseAlphaBand(true);

 

    SysCarto::RasterLayerPtr renderLayer =     SysCarto::LayerFactory::Instance()->CreateDefaultRasterLayer(complexRasterDataset);

    renderLayer->SetRenderer(rgbRenderPtr);

    renderLayer->SetName("多源数据图层");

    m_pCurrentControl->GetMap()->AddLayer(renderLayer);

    m_pCurrentControl->GetActiveView()->Refresh();

}

2.5 示例截图

posted @ 2020-02-26 21:43  PIESAT  阅读(320)  评论(0编辑  收藏  举报