FFMPEG之后得到了一幅图的所有RGB值,怎么使用这些RGB值构造BitmapData对象
FFMPEG之后得到了一幅图的所有RGB值,如何使用这些RGB值构造BitmapData对象
while( av_read_frame(pFormatCtx, &packet)>=0 )
{
if(packet.stream_index==videoStream)
{
int decodebye=avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);
if(frameFinished)
{
sws_scale(img_convert_ctx, pFrame->data, pFrame->linesize,0,
pCodecCtx->height, pFrameRGB->data, pFrameRGB->linesize); //转换成RGB
//BitmapData obj; 我如何使用RGB值(即pFrameRGB->data)构造BitmapData 对象?
}
}
}
------解决方案--------------------
data是scan0, linesize是stride,另外注意是BGR24,因为ffmpeg用的字节序是反的
------解决方案--------------------
看你要存储成为多少位的位图
如果是24位-那么每8位表示一个颜色值-一像素3字节
如果是32为-每8位表示一个颜色值,最后8位存储透明度。-一像素4字节
------解决方案--------------------
while( av_read_frame(pFormatCtx, &packet)>=0 )
{
if(packet.stream_index==videoStream)
{
int decodebye=avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);
if(frameFinished)
{
sws_scale(img_convert_ctx, pFrame->data, pFrame->linesize,0,
pCodecCtx->height, pFrameRGB->data, pFrameRGB->linesize); //转换成RGB
//BitmapData obj; 我如何使用RGB值(即pFrameRGB->data)构造BitmapData 对象?
}
}
}
------解决方案--------------------
data是scan0, linesize是stride,另外注意是BGR24,因为ffmpeg用的字节序是反的
------解决方案--------------------
看你要存储成为多少位的位图
如果是24位-那么每8位表示一个颜色值-一像素3字节
如果是32为-每8位表示一个颜色值,最后8位存储透明度。-一像素4字节
------解决方案--------------------