RGB24转YUV420失真

梨子Jelery 2018-08-28 02:00:25
使用bitblt采集桌面,然后获取像素的RGB值,转换成YUV420,为什么保存以后图片会失真,如图

size_t width = bmp.bmWidth;
size_t height = bmp.bmHeight;
size_t size = width * height;

COLORREF *pixels = new COLORREF[size];

for (size_t i = 0; i < height; i++)
{
for (size_t j = 0; j < width; j++)
{
pixels[i * width + j] = GetPixel(dest_hdc,j, i);
}
}

delete[] data;
data = NULL;
data = new byte[size * 3 / 2]; // yuv格式数组大小,y亮度占len长度,u,v各占len/4长度。
int y, u, v;

for (size_t i = 0; i < height; i++)
{
for (size_t j = 0; j < width; j++)
{
// 屏蔽ARGB的透明度值
int rgb = pixels[i * width + j] & 0x00FFFFFF;
// 像素的颜色顺序为bgr,移位运算。
int r = rgb & 0xFF;
int g = (rgb >> 8) & 0xFF;
int b = (rgb >> 16) & 0xFF;
// 套用公式
y = ((66 * r + 129 * g + 25 * b + 128) >> 8) + 16;
u = ((-38 * r - 74 * g + 112 * b + 128) >> 8) + 128;
v = ((112 * r - 94 * g - 18 * b + 128) >> 8) + 128;

y = y < 16 ? 16 : (y > 255 ? 255 : y);
u = u < 0 ? 0 : (u > 255 ? 255 : u);
v = v < 0 ? 0 : (v > 255 ? 255 : v);

// 赋值
data[i * width + j] = (byte)y;
data[size + (i >> 1) * width + (j & ~1) + 0] = (byte)u;
data[size + (i >> 1) * width + (j & ~1) + 1] = (byte)v;
}
}
delete[] pixels;

...全文
314 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
aclcla 2021-07-23
  • 打赏
  • 举报
回复

你问题怎么解决的呢?

schlafenhamster 2018-08-28
  • 打赏
  • 举报
回复
size_t width = bmp.bmWidth;
应该是 4 的 倍数
zgl7903 2018-08-28
  • 打赏
  • 举报
回复
多媒体计算机技术19春在线作业2-0003 要把一台普通的计算机变成多媒体计算机要解决的关键技术是: (1)视频音频信号的获取 (2)多媒体数据压编码和解码技术 (3)视频音频数据的实时处理和特技 (4)视频音频数据的输出技术 选项【A】:(1)(2)(3) 选项【B】:(1)(2)(4) 选项【C】:(1)(3)(4) 选项【D】:全部 正确选项:D 下列数组声明语句中,正确的是 选项【A】:Dim A [3,4] As Integer 选项【B】:Dim A (3,4) As Integer 选项【C】:Dim A [3;4] As Integer 奥鹏作业多媒体计算机技术在线作业2-0003全文共19页,当前为第1页。选项【D】:Dim A (3;4) As Integer 奥鹏作业多媒体计算机技术在线作业2-0003全文共19页,当前为第1页。 正确选项:B 下列程数据类型中,不属于VBA的是 选项【A】:长整型 选项【B】:布尔型 选项【C】:变体型 选项【D】:指针型 正确选项:D Authorwre是基于()的多媒体集成软件。 选项【A】:幻灯片 选项【B】:页面和卡片 选项【C】:时间线 选项【D】:图标 正确选项:D 奥鹏作业多媒体计算机技术在线作业2-0003全文共19页,当前为第2页。 奥鹏作业多媒体计算机技术在线作业2-0003全文共19页,当前为第2页。 数字视频编码的方式有哪些: (1)RGB视频 (2)YUV视频 (3)Y/C(S)视频 (4)复合视频 选项【A】:仅(1) 选项【B】:(1)(2) 选项【C】:(1)(2)(3) 选项【D】:全部 正确选项:D 在视频加工中对过度效果的设置中,要把相应的效果拖到()。 选项【A】:两视频之间 选项【B】:第一个视频的开头 选项【C】:第二个视频的结尾 选项【D】:任何地方 正确选项:A 奥鹏作业多媒体计算机技术在线作业2-0003全文共19页,当前为第3页。 奥鹏作业多媒体计算机技术在线作业2-0003全文共19页,当前为第3页。 要录制声音,除了要具备声卡、麦克风等硬件设备外,还要具备录音软件,下列不属于录音软件的是() 选项【A】:Windows的"录音机" 选项【B】:Goldware 选项【C】:Sound Farge 选项【D】:Media Player 正确选项:D 在Authorwre中,要制作背景音乐,需要在声音图标的属性的Timing选项中选择() 选项【A】:等待(Wait Until Done) 选项【B】:插入(Insert) 选项【C】:导入(Import) 选项【D】:同步(Concurrent) 正确选项:D 奥鹏作业多媒体计算机技术在线作业2-0003全文共19页,当前为第4页。关于文件的压缩,以下说法正确的是() 奥鹏作业多媒体计算机技术在线作业2-0003全文共19页,当前为第4页。 选项【A】:文本文件与图形图像都可以采用有损压缩 选项【B】:文本文件与图形图像都不可以采用有损压缩 选项【C】:文本文件可以采用有损压缩,图形图像不可以 选项【D】:图形图像可以采用有损压缩,文本文件不可以 正确选项:D 下列文件格式存储的图像,在缩放过程中不易失真的是() 选项【A】:.bmp 选项【B】:.psd 选项【C】:.jpg 选项【D】:.cdr 正确选项:D 下列方法中,不能从CD上获取声音的是() 奥鹏作业多媒体计算机技术在线作业2-0003全文共19页,当前为第5页。 选项【A】:直接从CD上复制并粘贴到硬盘上 奥鹏作业多媒体计算机技术在线作业2-0003全文共19页,当前为第5页。 选项【B】:利用超级解霸工具把整个音轨抓取下来 选项【C】:边播放CD上的声音,边用Total Recorder录制 选项【D】:利用Windows Media Player的"从CD复制"功能 正确选项:A MI##I音频文件是() 选项【A】:一种波形文件 选项【B】:一种采用P 选项【C】:M压缩的波形文件 选项【D】:是MP3的一种格式 选项【E】:是一种符号化的音频信号,记录的是一种指令序列。 正确选项:D 下列选项中,不属于Access数据类型的是 选项【A】:数字 奥鹏作业多媒体计算机技术在线作业2-0003全文共19页,当前为第6页。选项【B】:文本 奥鹏作业多媒体计算机技术在线作业2-0003全文共19页,当前为第6页。 选项【C】:报表 选项【D】:时间/日期 正确选项:C ( )是将声音变换为数字化信息,又将数字化信息变换为声音的设备。 选项【A】:音箱 选项【B】:音响 选项【C】:声卡 选项【D】:PCI卡 正确选项:C 如果按三个色差信号B-Y,R-Y,G-Y来传输彩色全电视信号,会造成( )失真

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧