| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2184 人关注过本帖
标题:图片隐藏,生成的图片只有下半张,求问哪里出错了
取消只看楼主 加入收藏
幽蓝小巫
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2017-12-19
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
图片隐藏,生成的图片只有下半张,求问哪里出错了
/*
将一张图片隐藏到另一张图片中
载体图为灰度图
blog:http://
2015年6月3日17:59:34
*/
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
/*
位图头结构
*/
#pragma pack(1)
typedef struct tagBITMAPFILEHEADER
{
    unsigned char bfType[2];//文件格式
    unsigned long bfSize;//文件大小
    unsigned short bfReserved1;//保留
    unsigned short bfReserved2;
    unsigned long bfOffBits; //DIB数据在文件中的偏移量
}fileHeader;
#pragma pack()
/*
位图数据信息结构
*/
#pragma pack(1)
typedef struct tagBITMAPINFOHEADER
{
    unsigned long biSize;//该结构的大小
    long biWidth;//文件宽度
    long biHeight;//文件高度
    unsigned short biPlanes;//平面数
    unsigned short biBitCount;//颜色位数
    unsigned long biCompression;//压缩类型
    unsigned long biSizeImage;//DIB数据区大小
    long biXPixPerMeter;
    long biYPixPerMeter;
    unsigned long biClrUsed;//多少颜色索引表
    unsigned long biClrImporant;//多少重要颜色
}fileInfo;
#pragma pack()
/*
调色板结构
*/
#pragma pack(1)
typedef struct tagRGBQUAD
{
    unsigned char rgbBlue; //蓝色分量亮度
    unsigned char rgbGreen;//绿色分量亮度
    unsigned char rgbRed;//红色分量亮度
    unsigned char rgbReserved;
}rgbq;
#pragma pack()

int main()
{
    FILE * fpCov, *fpSec, *fpSte;
    int i, j;
    unsigned char ImgData[300][300];
    unsigned char ImgData2[300][300];

    fileHeader * fh, *fh2;
    fileInfo * fi, *fi2;
    rgbq * fq, *fq2;
    if ((fpCov = fopen("D:/yincang/1.bmp", "rb")) == NULL)
    {
        printf("打开文件失败");
        exit(0);
    }

    if ((fpSec = fopen("D:/yincang/2.bmp", "rb")) == NULL)
    {
        printf("打开文件失败");
        exit(0);
    }
    if ((fpSte = fopen("D:/yincang/123.bmp", "wb")) == NULL)
    {
        printf("创建文件失败");
        exit(0);
    }
    /*
    读取载体图片
    */
    fh = (fileHeader *)malloc(sizeof(fileHeader));
    fi = (fileInfo *)malloc(sizeof(fileInfo));
    fq = (rgbq *)malloc(sizeof(rgbq) * 256);
    fread(fh, sizeof(fileHeader), 1, fpCov);
    fread(fi, sizeof(fileInfo), 1, fpCov);
    fread(fq, sizeof(rgbq), 256, fpCov);

    for (i = 0; i<fi->biHeight; i++)
    {
        for (j = 0; j<(fi->biWidth + 3) / 4 * 4; j++)
            fread(&ImgData[i][j], 1, 1, fpCov);
    }
    /*读取秘密图片*/
    fh2 = (fileHeader *)malloc(sizeof(fileHeader));
    fi2 = (fileInfo *)malloc(sizeof(fileInfo));
    fq2 = (rgbq *)malloc(sizeof(rgbq) * 256);
    fread(fh2, sizeof(fileHeader), 1, fpSec);
    fread(fi2, sizeof(fileInfo), 1, fpSec);
    fread(fq2, sizeof(rgbq), 256, fpSec);

    for (i = 0; i<fi->biHeight; i++)
    {
        for (j = 0; j<(fi->biWidth + 3) / 4 * 4; j++)
            fread(&ImgData2[i][j], 1, 1, fpSec);
    }
    /*隐藏图片*/
    for (i = 0; i<fi->biHeight; i++)
    {
        for (j = 0; j<(fi->biWidth + 3) / 4 * 4; j++)
        {
            /*将载体图片低四位置零*/
            ImgData[i][j] = ImgData[i][j] & 240;
            /*将秘密图片低四位置零*/
            ImgData2[i][j] = ImgData2[i][j] & 240;
            /*将秘密图片高四位移到低四位*/
            ImgData2[i][j] = ImgData2[i][j] >> 4;
            /*将秘密图片隐藏到载体图片中*/
            ImgData[i][j] = ImgData[i][j] + ImgData2[i][j];
        }
    }
    /*将图片数据写入*/
    fwrite(fh, sizeof(fileHeader), 1, fpSte);
    fwrite(fi, sizeof(fileInfo), 1, fpSte);
    fwrite(fq, sizeof(rgbq), 256, fpSte);
    for (i = 0; i<fi->biHeight;i++)
    {
        for (j = 0; j<(fi->biWidth + 3) / 4 * 4; j++)
            fwrite(&ImgData[i][j], 1, 1, fpSte);
    }

    free(fh);
    free(fi);
    free(fq);
    fclose(fpCov);
    fclose(fpSec);
    fclose(fpSte);
    printf("success\n");
    return 0;
}


[此贴子已经被作者于2017-12-19 22:55编辑过]

搜索更多相关主题的帖子: 图片 unsigned long sizeof fread 
2017-12-19 22:53
幽蓝小巫
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2017-12-19
收藏
得分:0 
回复 2楼 wp231957
所有图片均为256*256 bmp ,输出图片只显示三分之一。
2017-12-20 14:15
幽蓝小巫
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2017-12-19
收藏
得分:0 
回复 9楼 吹水佬
谢谢大佬回复,这个论坛不让发BMP图。https:// 这是代码来源,里面有图,不过下下来是JPG,需要转为BMP。大佬有兴趣可以测试下。我按您的代码试了下,没有成功。输出图片文件还是不能打开,应该是转为BMP格式时,参数有问题。询问下是应该选256*256 8位 对吗?

[此贴子已经被作者于2017-12-20 17:21编辑过]

2017-12-20 17:07
快速回复:图片隐藏,生成的图片只有下半张,求问哪里出错了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017708 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved