首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >水印图像上C点的水印函数

水印图像上C点的水印函数
EN

Stack Overflow用户
提问于 2015-06-06 17:53:36
回答 1查看 251关注 0票数 0

图片上的水印看起来不像图片,它只是混合的点背景是可以的,如何使它工作?

背景图像如yuv阵列(复制在ImgBlend中),水印图像像yuv矩阵,产生的图像、宽度和图像都很高,坐标x和y应该在哪里放置水印,a对于αtransparency.ImgBlend是生成图像,WIimage是水标图像,高宽是水印图像的维数。

代码语言:javascript
复制
   for (unsigned int j = 0 ; j < heightw ; ++j)
     {

       for (unsigned int i = 0 ; i < ( widthw * 3); ){    

          ImgBlend [y + j] [3 * x + i ] = (1-a) * ImgBlend [y + j][3 * x+i] + a * WImage [j] [i];

          ImgBlend [y + j] [3 * x + i + 1 ] = 0x80; 

          ImgBlend [y + j] [3 * x + i + 2 ] =0x80;
           i + = 3;
        }        
    }    
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-06 18:55:07

如果没有关于ImgBlend和WImage的更多信息,我就无法给您一个肯定的答案,但是,扫描线很可能是一个问题。位图由扫描线上的像素组成。扫描线被舍入到最近的单词边界。因此,下一条扫描线不必在上一条扫描线的最后一个像素之后开始。最多可以有3个未使用的字节。

代码语言:javascript
复制
scanlinesize= (((nPixels*bpp) + 31) / 32 * 4);

每像素使用bpp=位。

以下是一个解决方案。我一直无法运行它,但它应该能工作。这可不是小事。希望它能帮到你。如果是家庭作业(你链接到.edu),那么诚实地告诉你的教授你得到了帮助。

代码语言:javascript
复制
#define BPP 3    // means bytes-per-pixel (not bits)

void watermark(
        unsigned char *ImgBlend, int wimg,  int himg,   // image to blend onto
        unsigned char *Wimage,   int wmark, int hmark,  // image to blend
        int x, int y,                                   // position to blend onto
        int a                                           // alpha blending factor
    )
{
    int wi, hi;

    unsigned int scanlinesizeImgBlend= (((wimg *BPP*8) + 31) / 32 * 4);  // assumed from your code to be 3 BPP
    unsigned int scanlinesizeWimage  = (((wmark* 1 *8) + 31) / 32 * 4);  // assumed from your code to be 1 BPP

    unsigned char *scanlineImgBlend= ImgBlend + y*scanlinesizeImgBlend;  // first scanline to blend onto
    unsigned char *scanlineWimage  = Wimage;                             // first scanline to blend

    for (hi=0; hi<hmark && (hi+y)<himg; hi++,
            scanlineImgBlend += scanlinesizeImgBlend,
            scanlineWimage   += scanlinesizeWimage)
    {
        unsigned char *pixImgBlend= scanlineImgBlend + x*BPP;            // xpos to start blending
        unsigned char *pixWimage  = scanlineWimage;

        for (wi=0; wi<wmark && (wi+x)<wimg; wi++)
        {
            *pixImgBlend = (1-a) * *pixImgBlend + a * *pixWimage; pixImgBlend++; pixWimage++;
            *pixImgBlend++ = 0x80;
            *pixImgBlend++ = 0x80;
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30685900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档