一种基于并行计算的图片操作方法及系统的制作方法
【技术领域】
[0001]本发明涉及图片操作领域,尤其涉及一种基于并行计算的图片操作方法及系统。
【背景技术】
[0002]在应用开发过程中,经常会碰到图片的操作,比如用A图片做遮罩模板,用B图片做被遮罩模板,操作后得到的图片是A图片的形状,B图片的内容。
[0003]现有技术中,上述图片操作需要用户手动进行合并或者只是CPU进行单线程的操作,其操作效率低,不利于提高开发速度。
[0004]因此,现有技术还有待于改进和发展。
【发明内容】
[0005]鉴于上述现有技术的不足,本发明的目的在于提供一种基于并行计算的图片操作方法及系统,旨在解决现有的图片操作效率低的问题。
[0006]本发明的技术方案如下:
一种基于并行计算的图片操作方法,其中,包括步骤:
A、将统一格式的第一图片和第二图片的数据分别解析到相应的内存块中,第一图片和第二图片的分辨率均为mWidth*mHeight ;
B、创建与内存块--对应的输入共享数据缓冲区,将每一内存块中的数据拷贝至对应的输入共享数据缓冲区中;
C、创建输出共享数据缓冲区,作为并行计算的输出缓冲区;
D、创建mHeight个线程,利用并行计算函数执行并行计算操作;
E、将操作结果拷贝至CPU内存中,完成图片数据填充。
[0007]所述的基于并行计算的图片操作方法,其中,所述步骤B还包括:
拷贝完成后,释放各内存块中的数据。
[0008]所述的基于并行计算的图片操作方法,其中,所述步骤D具体包括:
D1、输入第一图片的数据、第二图片的数据、操作行数、单位像素大小至并行计算函数中;
D2、根据操作行数以及单位像素大小,计算出偏移位置;
D3、根据偏移位置和单位像素大小,分别依序从第一图片和第二图片的输入共享数据缓冲区读取一个像素值;
D4、对像素值进行异或操作,若结果为0,则使用透明黑色值初始化输出像素,若结果不为0,则取两个像素值中alpha值不为O的颜色值作为输出像素;
D5、将相应操作行数的输出像素写进输出共享数据缓冲区。
[0009]所述的基于并行计算的图片操作方法,其中,所述输出共享数据缓冲区的大小等于第二图片对应的输入共享数据缓冲区。
[0010]所述的基于并行计算的图片操作方法,其中,所述步骤E之后还包括: F、释放掉在并行计算过程中产生的资源。
[0011]—种基于并行计算的图片操作系统,其中,包括:
解析模块,用于将统一格式的第一图片和第二图片的数据分别解析到相应的内存块中,第一图片和第二图片的分辨率均为mWidth*mHeight ;
输入缓冲区创建模块,用于创建与内存块--对应的输入共享数据缓冲区,将每一内存块中的数据拷贝至对应的输入共享数据缓冲区中;
输出缓冲区创建模块,用于创建输出共享数据缓冲区,作为并行计算的输出缓冲区;
并行计算模块,用于创建mHeight个线程,利用并行计算函数执行并行计算操作;
填充模块,用于将操作结果拷贝至CPU内存中,完成图片数据填充。
[0012]所述的基于并行计算的图片操作系统,其中,所述输入缓冲区创建模块还包括:
释放单元,用于拷贝完成后,释放各内存块中的数据。
[0013]所述的基于并行计算的图片操作系统,其中,所述并行计算模块具体包括:
输入单元,用于输入第一图片的数据、第二图片的数据、操作行数、单位像素大小至并行计算函数中;
计算单元,用于根据操作行数以及单位像素大小,计算出偏移位置;
读取单元,用于根据偏移位置和单位像素大小,分别依序从第一图片和第二图片的输入共享数据缓冲区读取一个像素值;
异或操作单元,用于对像素值进行异或操作,若结果为0,则使用透明黑色值初始化输出像素,若结果不为0,则取两个像素值中alpha值不为O的颜色值作为输出像素;
输出单元,用于将相应操作行数的输出像素写进输出共享数据缓冲区。
[0014]所述的基于并行计算的图片操作系统,其中,所述输出共享数据缓冲区的大小等于第二图片对应的输入共享数据缓冲区。
[0015]所述的基于并行计算的图片操作系统,其中,还包括:
释放模块,用于释放掉在并行计算过程中产生的资源。
[0016]有益效果:本发明利用多个线程同时执行并行计算操作,即进行多线程的操作,所以相对于传统的单线程的操作,大大提高了操作效率,提高了开发速度。
【附图说明】
[0017]图1为本发明一种基于并行计算的图片操作方法较佳实施例的流程图。
[0018]图2为本发明的方法中多线程并行计算操作的流程图。
[0019]图3为图1所示方法中步骤S104的具体流程图。
[0020]图4为本发明一种基于并行计算的图片操作系统较佳实施例的结构框图。
[0021]图5为图4所示系统中输入缓冲区创建模块的具体结构框图。
【具体实施方式】
[0022]本发明提供一种基于并行计算的图片操作方法及系统,为使本发明的目的、技术方案及效果更加清楚、明确,以下对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0023]请参阅图1,图1为本发明一种基于并行计算的图片操作方法较佳实施例的流程图,如图所示,其包括步骤:
5101、将统一格式的第一图片和第二图片的数据分别解析到相应的内存块中,第一图片和第二图片的分辨率均为mWidth*mHeight ;
5102、创建与内存块--对应的输入共享数据缓冲区,将每一内存块中的数据拷贝至对应的输入共享数据缓冲区中;
5103、创建输出共享数据缓冲区,作为并行计算的输出缓冲区;
5104、创建mHeight个线程,利用并行计算函数执行并行计算操作;
5105、将操作结果拷贝至CPU内存中,完成图片数据填充。
[0024]本发明实施例中,由于创建了多个线程,每个线程都能独立并行执行计算任务,所以相对于传统的单线程操作,大大提高了操作效率,提高了开发速度。
[0025]具体来讲,所述步骤SlOl中,第一图片和第二图片的格式需要统一,且分辨率也需统一,如果第一图片和第二图片的格式和分辨率不统一,则需要将二者格式和分辨率转换为一致。然后将第一图片和第二图片的数据分别解析到内存块mSrcData和mDstData中,第一图片和第二图片的分辨率均为mWidth*mHeight,单个像素大小为mPixSize。
[0026]在所述步骤S102中,首先根据内存块mSrcData和mDstData中的数据,利用并行计算语言系统创建两块对应的输入共享数据缓冲区,分别记为smSrcData和smDstData。例如利用OpenCL中利用接口 clCreateBuffer创建出一块输入共享数据缓冲区。输入共享数据缓冲区其是供并行计算使用的,其实质是分配一片显存区域,以便于GPU进行并行计算时读入输入数据,并写入输出数据。
[0027]在创建输入共享数据缓冲区之后,需要利用并行计算语言系统接口,将mSrcData和mDstData中的数据分别拷贝到smSrcData和smDstData中。
[0028]拷贝完成后,即释放mSrcData和mDstData中的数据。
[0029]在所述步骤S103中,与步骤S102 —样,需要利用并行计算语言系统创建输出共享数据缓冲区outData,作为并行计算的输出缓冲区。所述输出共享数据缓冲区的大小等于第二图片对应的输入共享数据缓冲区smDstData。
[0030]所述步骤S104中,利用并行计算模块来创建mHeight个线程,如图2所示,并执行并行计算操作,其中每个线程都各自独立执行并行计算操作。例如OpenCL使用cIEnqueueNDRangeKerneI函数执行此并行计算操作。
[0031]进一步,如图3所示,所述步骤S104具体包括:
S201、输入第一图片的数据、第二图片的数据、操作行数、单位像素大小至并行计算函数中;
并行计算函数所需的四个输入参数如下:
1、第一图片的数据,第一图片的数据可从smSrcData中获取;2、第二图片的数据,第二图片的数据可从smDstData中获取;3、操作行数,循环赋予mHeight个线程数值0~mHeight_l,记为nLine ; 4、单位像素大小,单位像素大小为mPi