日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

音视频入门-02-RGB拼图

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 音视频入门-02-RGB拼图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

音視頻入門文章目錄

圖片 & 像素點 & RGB

平時瀏覽的圖片看不出像素點:

圖片放大時,可以看出圖片是一個個像素點組成的:

每個像素點的顏色可以用 RGB 表示:

RGB 拼圖

既然圖片是像素點組成的,而像素點的顏色可以用 RGB 來表示,那我們可以用 RGB 來拼出自己的圖片!

1. 設定目標

這是我們想要使用 RGB 像素點拼出來的圖片:

彩虹的顏色:

顏色名RGB十六進制RGB24 二進制
255, 0, 00XFF000011111111 00000000 00000000
255, 165, 00XFFA50011111111 10100101 00000000
255, 255, 00XFFFF0011111111 11111111 00000000
0, 255, 00X00FF0000000000 11111111 00000000
0, 127, 2550X007FFF00000000 01111111 11111111
0, 0, 2550X0000FF00000000 00000000 11111111
139, 0, 2550X8B00FF10001011 00000000 11111111

2. 分析實現思路

用 RGB24 格式表示像素顏色值,每個像素用 24 比特位表示,占用三個字節。

分辨率 7X7 彩虹圖片像素排列:

分辨率 7X7 彩虹圖片像素 RGB 二進制:

7X7 只是為了分析方便,我們動手時要拼出 700X700 像素點的圖片

3. 動手實踐

將像素點的 RGB24 二進制存入文件:

#include <stdio.h>// 彩虹的七種顏色 u_int32_t rainbowColors[] = {0XFF0000, // 紅0XFFA500, // 橙0XFFFF00, // 黃0X00FF00, // 綠0X007FFF, // 青0X0000FF, // 藍0X8B00FF // 紫 };void writeRainbow(char *outputFile, int width, int height) {// 打開文件FILE *rgbFile = fopen(outputFile, "wb ");for (int i = 0; i < width; i) {// 當前顏色u_int32_t currentColor = 0X000000;if(i < 100) {// 前 100 行 紅色currentColor = rainbowColors[0];} else if(i < 200) {// 100-200 行 橙色currentColor = rainbowColors[1];} else if(i < 300) {// 200-300 行 黃色currentColor = rainbowColors[2];} else if(i < 400) {// 300-400 行 綠色currentColor = rainbowColors[3];} else if(i < 500) {// 400-500 行 青色currentColor = rainbowColors[4];} else if(i < 600) {// 500-600 行 藍色currentColor = rainbowColors[5];} else if(i < 700) {// 600-700 行 紫色currentColor = rainbowColors[6];}// 當前顏色 R 分量u_int8_t R = (currentColor & 0xFF0000) >> 16;// 當前顏色 G 分量u_int8_t G = (currentColor & 0x00FF00) >> 8;// 當前顏色 B 分量u_int8_t B = currentColor & 0x0000FF;for (int j = 0; j < height; j) {// 按順序寫入一個像素 RGB24 到文件中fputc(R, rgbFile);fputc(G, rgbFile);fputc(B, rgbFile);}}// 關閉文件fclose(rgbFile); }int main() {writeRainbow("/Users/staff/Desktop/rainbow-700x700.rgb24", 700, 700);return 0; }

運行上面的代碼,將會生成 rainbow-700x700.rgb24 文件

檢查生成的文件

  • 700X700=490000 個像素點
  • 每個像素點顏色用 RGB24 編碼表示,每個像素點用 24 比特位表示,占 3 個字節
  • 490000 X 3 = 1470000 字節(B)
$ cd Desktop $ ls -al rainbow-700x700.rgb24 -rw-r--r-- 1 staff staff 1470000 9 12 18:17 rainbow-700x700.rgb24

感覺生成了正確的 rgb24 格式的圖片。

確認 RGB24 文件正確性

要確認生成的 rgb24 格式的圖片是正確的,最直接的方式就是使用圖片查看軟件打開。但是,普通的圖片查看軟件都不支持 rgb24 這種格式。這時就要用專業的多媒體框架 FFmpeg 了。

下載 ffplay 工具

FFmpeg 工具下載

根據自己的系統,下載 FFmpeg Static 工具包。

這里拿 macOS 為例:

$ ll total 163968 -rw-r--r--@ 1 staff staff 66M 9 12 20:43 ffmpeg-4.2-macos64-static.zip# 解壓壓縮包 $ unzip ffmpeg-4.2-macos64-static.zip$ cd ffmpeg-4.2-macos64-static $ ll total 88 -rw-r--r--@ 1 staff staff 35K 8 8 14:26 LICENSE.txt -rw-r--r--@ 1 staff staff 4.0K 8 8 14:26 README.txt drwxr-xr-x@ 5 staff staff 160B 8 8 14:26 bin drwxr-xr-x@ 35 staff staff 1.1K 8 8 14:26 doc drwxr-xr-x@ 8 staff staff 256B 8 8 14:26 presets $ cd bin $ ll total 394000 -rwxr-xr-x@ 1 staff staff 64M 8 8 14:26 ffmpeg -rwxr-xr-x@ 1 staff staff 64M 8 8 14:26 ffplay -rwxr-xr-x@ 1 staff staff 64M 8 8 14:26 ffprobe# 測試執行 ffplay 命令 $ ./ffplay ffplay version 4.2 Copyright (c) 2003-2019 the FFmpeg developersbuilt with Apple LLVM version 10.0.1 (clang-1001.0.46.4)configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-appkit --enable-avfoundation --enable-coreimage --enable-audiotoolboxlibavutil 56. 31.100 / 56. 31.100libavcodec 58. 54.100 / 58. 54.100libavformat 58. 29.100 / 58. 29.100libavdevice 58. 8.100 / 58. 8.100libavfilter 7. 57.100 / 7. 57.100libswscale 5. 5.100 / 5. 5.100libswresample 3. 5.100 / 3. 5.100libpostproc 55. 5.100 / 55. 5.100 Simple media player usage: ffplay [options] input_fileAn input file must be specified Use -h to get full help or, even better, run 'man ffplay'

使用 ffplay 打開 rgb24 圖片

ffplay -f rawvideo -pixel_format rgb24 -s 700x700 rainbow-700x700.rgb24# -pixel_format rgb24 指定像素格式 rgb24 # -s 700x700 指定圖片分辨率 700x700

預覽:

Congratulations!

成功用像素點拼出了一張圖片!

代碼:rgb-pixel

內容有誤?聯系作者:

總結

以上是生活随笔為你收集整理的音视频入门-02-RGB拼图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。