⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gray.c

📁 一个基于DCT变换域的数字水印系统实例
💻 C
字号:
/*############################################################################# * 文件名:gray.c * 功能:  灰度图像操作 * modified by  PRTsinghua@hotmail.com#############################################################################*/#include "wm.h"#include "gray.h"// 申请8×8的灰度图像块gray **alloc_grays_8x8() {  return alloc_grays(8, 8);}// 申请cols×rows大小的内存块gray **alloc_grays(int cols, int rows) {  gray **p;  int i;  p = (gray **)malloc(rows * sizeof(gray *));  if (!p) {#ifdef DEBUG    fprintf(stderr, "alloc_grays(): malloc() failed\n");    exit(1);#else    return NULL;#endif  }  p[0] = (gray *)malloc(rows * cols * sizeof(gray));  if (!p[0]) {#ifdef DEBUG    fprintf(stderr, "alloc_grays(): malloc() failed\n");    exit(1);#else    free(p);    return NULL;#endif  }  for (i = 1; i < rows; i++) {    p[i] = &(p[0][i * cols]);  }  return p;}// 释放内存块void free_grays(gray **grays) {  free(grays[0]);  free(grays);}// 拷贝灰度图像到另外的块void copy_grays_to_block(gray ** block_grays, gray ** image_grays, int c, int r, int w, int h) {  int i, j;#ifdef DEBUG  if (!image_grays) {    fprintf(stderr, "copy_grays_to_block(): NULL image pixels\n");  }  if (!block_grays) {    fprintf(stderr, "copy_grays_to_block(): NULL block pixels\n");  }  if (w <= 0 || h <= 0 || c < 0 || r < 0) {    fprintf(stderr, "copy_grays_to_block(): block dimension out of range\n");  }#endif    for (i = 0; i < w; i++) {    for (j = 0; j < h; j++)      block_grays[j][i] = image_grays[r + j][c + i];  }}// 从块中往灰度图像拷贝数据void copy_grays_from_block(gray ** image_grays, gray ** block_grays, intc, int r, int w, int h) {  int i, j;#ifdef DEBUG  if (!image_grays) {    fprintf(stderr, "copy_grays_from_block(): NULL image pixels\n");  }  if (!block_grays) {    fprintf(stderr, "copy_grays_from_block(): NULL block pixels\n");  }  if (w <= 0 || h <= 0 || c < 0 || r < 0) {    fprintf(stderr, "copy_grays_from_block(): block dimension out of range\n");  }#endif    for (i = 0; i < w; i++) {    for (j = 0; j < h; j++)      image_grays[r + j][c + i] = block_grays[j][i];  }}// 打印灰度图像void print_grays(gray **grays, int c, int r, int w, int h) {  int i, j;  gray *p;#ifdef DEBUG  if (!grays) {    fprintf(stderr, "print_grays(): NULL pixels\n");  }  if (w <= 0 || h <= 0 || c < 0 || r < 0) {    fprintf(stderr, "print_grays(): block dimension out of range\n");  }#endif  for (j = r; j < r + h; j++) {    p = &grays[j][c];    for (i = 0; i < w; i++)      fprintf(stderr, "%3d ", *(p++));    fprintf(stderr, "\n");  }}// 打印8×8的灰度块void print_grays_8x8(gray **grays) {  int i, j;  for (i = 0; i < 8; i++) {    for (j = 0; j < 8; j++)      fprintf(stderr, "%3d ", grays[i][j]);    fprintf(stderr, "\n");  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -