精华内容
下载资源
问答
  • FFmpeg 可以实现像素格式转换和尺寸转换,但是性能开销非常大,对视频帧率影响比较大,实际开发中最好用 Shader来实现,FFmpeg的优势转换接口比较简单。 像素格式转换上下文 SwsContext (1)sws_getContext (2)...

    Demo

    FFmpeg 可以实现像素格式转换和尺寸转换,但是性能开销非常大,对视频帧率影响比较大,实际开发中最好用 Shader来实现,FFmpeg的优势转换接口比较简单。

    像素格式转换上下文 SwsContext

    (1)sws_getContext
    (2)sws_getCachedContext(
    struct SwsContext *context,
    int srcW, int srcH, 原宽高
    enum AVPixelFormat srcFormat,原像素格式
    int dstW, int dstH, 目标宽高
    enum AVPixelFormat dstFormat,目标格式
    int flags, 算法标签(性能差异 效果差异 针对尺寸变化)
    SwsFilter *srcFilter,过滤器
    SwsFilter *dstFilter,过滤器
    const double *param 算法中默认值的设定 可以默认);
    两个函数的差别是第一个参数:SwsContext
    sws_getContext 会创建一个上下文空间,sws_getCachedContext会去缓冲中找,前后两次参数没变时返回同一个

    //每一帧数据的处理
    int sws_scale(struct SwsContext *c,
    const uint8_t *const srcSlice[],具体数据的数组
    const int srcStride[],一行数据的大小
    int srcSliceY, 传0
    int srcSliceH, 图形高度
    uint8_t *const dst[], 目标的地址(指针数组)
    const int dstStride[]) 输出的一行数据的大小;

    void sws_freeContext(struct SwsContext *swsContext);//是否

     

         for (; ; ) {//保证能搜到全部的解码数据
                re = avcodec_receive_frame(cc, frame);
                if (re != 0) {
                    break;
                }
                if (cc == vc) {
                    frameCount++;
                    vctx = sws_getCachedContext(vctx, frame->width, frame->height, (AVPixelFormat)frame->format, outWidth, outHeight, AV_PIX_FMT_RGBA, SWS_FAST_BILINEAR, 0, 0, 0);
                    if (!vctx) {
                        NSLog(@"sws_getCachedContext failed!");
    
                    }else{
                        uint8_t *data[AV_NUM_DATA_POINTERS] = {0};
                        data[0] = (uint8_t *)rgb;
                        int lines[AV_NUM_DATA_POINTERS] = {0};
                        lines[0] = outWidth * 4;
                        int h = sws_scale(vctx, frame->data, frame->linesize, 0, frame->height
                                          , data, lines);
                        NSLog(@"sws_scale h :%d ",h);
                    }
                }
    
            }
            //最后一针的时候 avcodec_send_packet(cc, NULL)
            av_packet_unref(pkt);
    

     

    2018-08-03 19:16:54.397601+0800 FFmpeg402[611:176423] sws_scale h :720
    2018-08-03 19:16:54.409398+0800 FFmpeg402[611:176423] sws_scale h :720
    2018-08-03 19:16:54.417052+0800 FFmpeg402[611:176423] sws_scale h :720
    2018-08-03 19:16:54.425106+0800 FFmpeg402[611:176423] sws_scale h :720
    2018-08-03 19:16:54.440420+0800 FFmpeg402[611:176423] sws_scale h :720
    2018-08-03 19:16:54.448448+0800 FFmpeg402[611:176423] sws_scale h :720
    2018-08-03 19:16:54.457397+0800 FFmpeg402[611:176423] sws_scale h :720
    2018-08-03 19:16:54.465670+0800 FFmpeg402[611:176423] sws_scale h :720
    2018-08-03 19:16:54.473706+0800 FFmpeg402[611:176423] sws_scale h :720
    2018-08-03 19:16:54.481495+0800 FFmpeg402[611:176423] sws_scale h :720
    2018-08-03 19:16:54.489395+0800 FFmpeg402[611:176423] sws_scale h :720
    2018-08-03 19:16:54.497006+0800 FFmpeg402[611:176423] sws_scale h :720
    2018-08-03 19:16:54.504962+0800 FFmpeg402[611:176423] sws_scale h :720
    2018-08-03 19:16:54.512761+0800 FFmpeg402[611:176423] sws_scale h :720
    2018-08-03 19:16:54.520280+0800 FFmpeg402[611:176423] sws_scale h :720
    2018-08-03 19:16:54.528375+0800 FFmpeg402[611:176423] sws_scale h :720
    2018-08-03 19:16:54.543610+0800 FFmpeg402[611:176423] sws_scale h :720
    2018-08-03 19:16:54.551972+0800 FFmpeg402[611:176423] sws_scale h :720
    2018-08-03 19:16:54.559866+0800 FFmpeg402[611:176423] sws_scale h :720
    

    音频冲采样 SwrContext

    一般音频解码出来直播不能直接播放,需要经过冲采样

    SwrContext *swr_alloc(void); 上下文

    SwrContext *swr_alloc_set_opts(设置参数
    struct SwrContext *s,
    int64_t out_ch_layout,输出layout
    AVSampleFormat out_sample_fmt,输出的样本格式
    int out_sample_rate,输出样本率
    int64_t in_ch_layout,输入layout
    AVSampleFormat in_sample_fmt,输入的样本格式
    int in_sample_rate, 输入样本率
    int log_offset, 0
    void *log_ctx);日志 0

    int swr_init(struct SwrContext *s); 初始化

    void swr_free(struct SwrContext **s);释放

    转换函数swr_convert 对每一帧音频做重采样

    • int swr_convert(struct SwrContext *s,
    uint8_t **out,输出的数组
    int out_count,样本的数量 单通道
    • const uint8_t **in , 输入参数指针数组
    int in_count);

     

       //音频重采样上下文初始化
        SwrContext *actx = swr_alloc();
        //设置参数
        actx = swr_alloc_set_opts(actx,
                                  av_get_default_channel_layout(2),//2
                                  AV_SAMPLE_FMT_S16,
                                  ac->sample_rate,
                                  av_get_default_channel_layout(ac->channels),
                                  ac->sample_fmt,
                                  ac->sample_rate,
                                  0,
                                  0);
        re = swr_init(actx);
        if (re != 0) {
            NSLog(@"swr_init failed!");
        }else{
            NSLog(@"swr_init success!");
        }
    

     

             uint8_t *outData[2] = {0};
                    outData[0]  = (uint8_t *)pcm;
                    //重采样
                    int len = swr_convert(actx,//上下文
                                          outData,
                                          frame->nb_samples,
                                          (const uint8_t **)frame->data,
                                          frame->nb_samples);
            
                   NSLog(@"swr_convert len :%d ",len);
                    
    

     

    2018-08-03 19:45:47.054517+0800 FFmpeg402[630:182386] swr_convert len :1024
    2018-08-03 19:45:47.054560+0800 FFmpeg402[630:182386] swr_convert len :1024
    2018-08-03 19:45:47.066537+0800 FFmpeg402[630:182386] swr_convert len :1024
    2018-08-03 19:45:47.066658+0800 FFmpeg402[630:182386] swr_convert len :1024
    2018-08-03 19:45:47.066744+0800 FFmpeg402[630:182386] swr_convert len :1024
    2018-08-03 19:45:47.066872+0800 FFmpeg402[630:182386] swr_convert len :1024
    2018-08-03 19:45:47.066932+0800 FFmpeg402[630:182386] swr_convert len :1024
    2018-08-03 19:45:47.066977+0800 FFmpeg402[630:182386] swr_convert len :1024
    

     

    展开全文
  • 相比openGL shader转换来说,ffmpeg转换相对简单,但是效率相对较低 函数 1> sws_getContext:获取上下文 2> sws_getCachedContext:获取上下文,与sws_getContext区别在于内存空间由调用者自己管理 @...

    优缺点

    相比openGL shader转换来说,ffmpeg转换相对简单,但是效率相对较低

     

    函数

    1> sws_getContext:获取上下文

    2> sws_getCachedContext:获取上下文,与sws_getContext区别在于内存空间由调用者自己管理

        @param SwsContext *context:格式转换上下文

        @param int srcW, int srcH, enum AVPixelFormat srcFormat:输入格式

        @param int dstW, int dstH, enum AVPixelFormat dstFormat:输出格式

        @param  int flags:转换算法,如线性差值算法

        @param  SwsFilter *srcFilter:通常不用

        @param  SwsFilter *dstFilter:通常不用

        @param  const double **param:算法参数,不涉及可不指定

    3> sws_scale:转换

        @param SwsContext *context:格式转换上下文

        @param const uint8_t *const srcSlice[]:源数据数组,二维数组数据

        @param const int srcStride[]:一行数据的宽度,linesize

        @param int srcSliceY:用不到

        @param int srcSliceH:图像高度,遍历一行行数据

        @param uint8_t *dst[]:输出数据地址

        @param const int dstStride[]:输出数据长度

        @return:输出的数据高度

    4> sws_freeContext:释放上下文空间

     

    示例程序

    代码:

    void transVideoPixel(SwsContext *ctx, AVFrame *frame)
    {
        ctx = sws_getCachedContext(ctx,
                             frame->width, frame->height, (AVPixelFormat)frame->format, // 输入宽高、格式
                             frame->width, frame->height, AV_PIX_FMT_BGRA,  // 输出宽高、格式
                             SWS_BILINEAR, // 临近差值
                             0, 0, 0);
        if (nullptr != ctx) {
            // 一个像素四个字节
            unsigned char *rgb = new unsigned char[frame->width * frame->height * 4];
            uint8_t *dstData[2] = {0};
            dstData[0] = rgb;
            int lines[2] = {0};
            lines[0] = frame->width * 4;
            int retHeight = sws_scale(ctx,
                      frame->data, frame->linesize, 0, frame->height,
                      dstData, lines);
            cout << "sws scaled retHeight = " << retHeight << endl;
            delete []rgb;
            rgb = nullptr;
        }
    }

    输出:

    展开全文
  • 像素尺寸和打印尺寸

    2020-08-05 10:01:26
    DPI(点每英寸) DPI是描述分辨率的单位,...一张实际尺寸为200*20毫米的物体,需要按照一比一的尺寸进行打印,打印机的DPI为200,那么图像的物体在图像中的像素尺寸应该为多少? 对于200dpi的打印机,1mm可以印刷...

    DPI(点每英寸)

    DPI是描述分辨率的单位,图像分辨率是单位英寸中所包含的像素点数。DPI是打印机,鼠标等设备分辨率的度量单位。

    打印机200dpi表示,每英寸上,能印刷200像素。

     

    英寸和毫米换算

    1 英寸=25.4 毫米

    1 毫米(mm)=0.0393700787402 英寸

     

     

    像素换算

    一张实际尺寸为200*20毫米的物体,需要按照一比一的尺寸进行打印,打印机的DPI为200,那么图像的物体在图像中的像素尺寸应该为多少?

     

    对于200dpi的打印机,1mm可以印刷7.874014个像素。

    所以实际尺寸为200*20毫米的物体,在图像中的像素尺寸为(1574,157)

    展开全文
  • matlab改变图片尺寸像素尺寸转换

    万次阅读 多人点赞 2019-05-10 23:59:00
    由于找到的图片的宽度高度跟这个不一致,所以会出现多个重复的图部分出现, 因此需要将图片处理为240mm*120mm 真正的工科生是不用ps的,我打开matlab就是一顿操作 a= imread('ground.jpg'); b= imresize(a,...

    今天对象做电子板报,需要将图片作为word背景,word页面设置为240mm*120mm,

    由于找到的图片的宽度和高度跟这个不一致,所以会出现多个重复的图部分出现,

    因此需要将图片处理为240mm*120mm

    真正的工科生是不用ps的,我打开matlab就是一顿操作

    a= imread('ground.jpg');
    b= imresize(a,[120 240]);
    imwrite(b,'new.png');

    结果插入一看,居然小了?!

    哎,我忘了换算像素和尺寸了

    像素/分辨率=英寸,1英寸=2.54厘米

    所以我需要的图片宽度为240*96/25.4=907.08像素,高度为120*96/25.4=453.54像素

    于是:

    a= imread('ground.jpg');
    b= imresize(a,[454 907]);
    imwrite(b,'new.png');

    succeed! 


    B = imresize(A,m)%表示把图像A放大m倍
    B = imresize(A,m,method)
    B = imresize(A,[height width],method)

    参数method指定的插值运算的几种可选值:
    'nearest'最近邻插值
    'bilinear'双线性插值
    'bicubic'(默认值)双三次插值

     

    展开全文
  • m_iWidth = sWidth*96/25.4;//物理宽度转换像素 物理尺寸单位mm毫米 m_iHeight = dHeight*96/25.4; 转载于:https://www.cnblogs.com/oltra/p/6141345.html
  • 像素尺寸大小的转换

    万次阅读 2011-10-31 17:25:15
    今日转换打印机页面大小时有些含糊,现做记录。 以A4纸为例: XPS文件中print ticket 大小如下: 210000 297000 单位为微米。 即A4大小以毫米计算,为 210×297mm. 分辨率是96像素/英寸时,A4纸的尺寸...
  • 图像每英寸长度内的像素点数。 DPI(Dots Per Inch,每英寸点数)是一个量度单位,用于点阵数码影像,指每一英寸长度中,取样、可显示或输出点的数目。 DPI 是打印机、鼠标等设备分辨率的度量单位。是衡量打印机打印...
  • 像素尺寸

    2016-03-11 17:11:25
    photoshop中两种分辨率换算  72像素/英寸=28.346像素/厘米  300像素/英寸=118.11像素/厘米  1 厘米=0.3937 英寸  1 英寸=2.54 厘米  以常见1024像素对比:    1024像素=3.413英寸=8.67厘米 (300像素/...
  • 小程序界面配置最好使用rpx,这样在不同的手机可以实现自适应。 所以如果你使用的模块有pxh或者rem,换算方式为: 1px=2rpx 1rem=35rpx
  • 分辨率、像素、密度屏幕尺寸的关系(换算) 手机的分辨率 像素 密度 屏幕尺寸是我们经常听到的字眼,它们之间的关系如下: 分辨率是指屏幕上有横竖各有多少个容器点,每个容器点是用于容纳一...
  • flutter 的像素尺寸

    万次阅读 热门讨论 2019-09-24 08:49:25
    一般我们在android,ios中都有自己的尺寸,如:dp,pt 但是在flutter中写尺寸是没有单位的。如: SizedBox(height: 736,width: 375,child: Container(color: Colors.lightBlueAccent) ) 实际上它的尺寸当然是有的...
  • 最近做了一个视力检测的APP项目,其中用到了将像素转换为实际大小,经过研究学到了一些知识,在这里大家分享一下。 实现步骤为:  首先获取物理参数:  1.手机的像素密度(1英寸=x像素) dpiX/dpiY  2.实际...
  • package com.lab.web.view...import android.content.Context;/** * Created by YTF on 2017/8/9. */public class DensityUtil { /** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) * * @param context 上下文
  • 如:一个22寸的电脑液晶屏像素是1920*1080,一个52寸的液晶电视像素也是1920*1080 , 他们像素数是同样的,但52寸比22寸画面就大多了,实际就是每个像素点也变大了。 同分辨率下,点距越大画面尺寸越大。点距...
  • 本文转自:http://blog.csdn.net/wzzvictory/article/details/8565872比原文 略有增改1、 iPhone中的点和像素。 点(pt)的英文全称是point,确切的...像素(pixel)由Picture Element这两个词组成,像素是位图的最
  • 前言: 我们的a4纸张大小我们是不知道的,但是有的时候又是需要考虑的,这里整理一下。...a4的比例转换: 1、595*842 2、794*1123 3、1487*2105 4、1240*1754 5、2480*3508 6、992*1403 (这个是我实际使用的) ...
  • 目录分辨率像素尺寸GSD图片文件大小 分辨率 1.分辨率是指单位长度容纳的像素点数量。 2.单位有:dpi(点每英寸,有时也可使用厘米。 )、lpi(线每英寸)、ppi(像素每英寸)PPD(PPPixels Per Degree 角分辨率,...
  • A:像素分为物理像素和逻辑像素,设计师提供的是物理像素,而我们使用的是逻辑像素。  物理像素并不代表css中使用的像素。  如iphone5s的逻辑分辨率是320×568,而物理分辨率是640×1136,像素倍率是2倍。 1....
  • 像素和分辨率以及换算

    千次阅读 2015-01-20 22:43:41
    简单的说,我们通常所说的像素,就是CCD上光电感应元件的数量,一个感光元件经过感光,光电信号转换,A/D转换等步骤以后,在输出的照片上就形成一个点,我们如果把影像放大数倍,会发现这些连续色调其实是由许多色彩...
  • 使用快捷键:ctrl+k,调出默认值修改框;选择“单位标”; 在“单位标尺”中,选择**“像素**”,保存退出;
  • iOS像素和点的转换

    2017-08-01 09:53:59
    首先大家要清楚一些概念: px: pixel,像素,屏幕上显示的最小单位。 pt: point ,点,是一个标准的长度单位,1pt=1/72...通常我们所说的iphone5屏幕尺寸为4英尺指的是显示屏对角线的长度 下图是一张比较完整的Iph
  • 图像处理中像素和毫米的换算

    千次阅读 2019-12-02 20:15:20
    图像尺寸:表示图像的宽度高度,以像素(或 cm、mm、inch 等)为单位,表示在图像横边竖边上各有多少个像素; 图像分辨率:表示单位面积内的像素数量,即像素密度。单位通常是 dpi,即像素点与长度单位英寸的...
  • 像素与实际尺寸

    千次阅读 2017-04-22 16:02:10
    dpi是指单位面积内像素的多少,也就是扫描精度,目前国际上都是计算一英寸面积内像素的多少。...例如要冲洗4*6英寸的照片,扫描精度必须是300,那么文件尺寸应该是(4*300)*(6*300)=1200像素*1800像素。 1
  • 工业镜头的焦距(f mm)可以根据视场(FOV),工作距离(WD)CCD芯片尺寸计算出来。 FOV视场:被摄取物体的大小,视场的大小是以镜头至被摄物体距离(WD),镜头焦距(F)以及CCD芯片尺寸确定的。 1.镜头的焦距,视场大小...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 67,076
精华内容 26,830
关键字:

像素和尺寸怎么转换