• 大小: 313KB
    文件类型: .7z
    金币: 1
    下载: 0 次
    发布日期: 2021-06-08
  • 语言: C/C++
  • 标签: png  yuv  

资源简介

能将png格式图片转换成YUV格式。 C++实现,并且自带可运行实例。

资源截图

代码片段和文件信息

#include 
#include “png/png.h“
#include 
using namespace std;

const char *png_file = “NoSignal.png“;

void rgba_resize(int src_width int src_height int dst_width int dst_height uint8_t *src_buf uint8_t *dst_buf) {
    int r_width = src_width * 4;
    int w_width = dst_width * 4;
    for (int hnum = 0; hnum < dst_height; hnum++){
        for (int wnum = 0; wnum < dst_width; wnum++) {
            double d_original_img_hnum = hnum * src_height / (double) dst_height;
            double d_original_img_wnum = wnum * src_width / (double) dst_width;
            int i_original_img_hnum = (int) d_original_img_hnum;
            int i_original_img_wnum = (int) d_original_img_wnum;
            double distance_to_a_x = d_original_img_wnum - i_original_img_wnum;//在原图像中与a点的水平距离
            double distance_to_a_y = d_original_img_hnum - i_original_img_hnum;//在原图像中与a点的垂直距离

            int original_point_a =
                    i_original_img_hnum * r_width + i_original_img_wnum * 4;//数组位置偏移量,对应于图像的各像素点RGB的起点相当于点A
            int original_point_b =
                    i_original_img_hnum * r_width + (i_original_img_wnum + 1) * 4;//数组位置偏移量,对应于图像的各像素点RGB的起点相当于点B
            int original_point_c =
                    (i_original_img_hnum + 1) * r_width + i_original_img_wnum * 4;//数组位置偏移量,对应于图像的各像素点RGB的起点相当于点C
            int original_point_d =
                    (i_original_img_hnum + 1) * r_width + (i_original_img_wnum + 1) * 4;//数组位置偏移量,对应于图像的各像素点RGB的起点相当于点D
            if (i_original_img_hnum + 1 == dst_width - 1) {
                original_point_c = original_point_a;
                original_point_d = original_point_b;
            }
            if (i_original_img_wnum + 1 == dst_width - 1) {
                original_point_b = original_point_a;
                original_point_d = original_point_c;
            }

            int pixel_point = hnum * w_width + wnum * 4;//映射尺度变换图像数组位置偏移量
            dst_buf[pixel_point] =
                    (uint8_t) (src_buf[original_point_a] * (1 - distance_to_a_x) * (1 - distance_to_a_y) +
                               src_buf[original_point_b] * distance_to_a_x * (1 - distance_to_a_y) +
                               src_buf[original_point_c] * distance_to_a_y * (1 - distance_to_a_x) +
                               src_buf[original_point_d] * distance_to_a_y * distance_to_a_x);
            dst_buf[pixel_point + 1] =
                    (uint8_t) (src_buf[original_point_a + 1] * (1 - distance_to_a_x) * (1 - distance_to_a_y) +
                               src_buf[original_point_b + 1] * distance_to_a_x * (1 - distance_to_a_y) +
                               src_buf[original_point_c + 1] * distance_to_a_y * (1 - distance_to_a_x) +
                               src_buf[original_point_d + 1] * distance_to_a_y * distance_to_a_x);
            dst_buf[pixel_point + 2] =
                    (uint8_t) (src_buf[original_point_a + 2] * (1 - distance_to_a_x) * (1 - distance_to_a_y) +
                          

评论

共有 条评论