yuyv图像转rgb后转bmp的一个简单demo

yuyv转rgb的公式:
r = 1.164*(y-16) + 1.159*(v-128);
g = 1.164*(y-16) - 0.380*(u-128) - 0.813*(v-128);
b = 1.164*(y-16) + 2.018*(u-128);

#include <fcntl.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>

#define WIDTH  640
#define HEIGHT 480
#define YUYV_FILE "./0.yuyv"
#define BMP_FILE  "./out.bmp"


typedef struct                       /**** BMP file header structure ****/
{
    unsigned short bftype;
    unsigned int   bfSize;           /* Size of file */
    unsigned short bfReserved1;      /* Reserved */
    unsigned short bfReserved2;      /* ... */
    unsigned int   bfOffBits;        /* Offset to bitmap data */

} BITMAPFILEHEADER;

typedef struct                       /**** BMP file info structure ****/
{
    unsigned int   biSize;           /* Size of info header */
    int            biWidth;          /* Width of image */
    int            biHeight;         /* Height of image */
    unsigned short biPlanes;         /* Number of color planes */
    
  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在Java中,可以使用G2D对YUYV图像进行RGB换。以下是一个示例代码: ``` import java.awt.Graphics2D; import java.awt.image.BufferedImage; public class YUYVtoRGBConverter { public static BufferedImage convert(byte[] yuyvData, int width, int height) { BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = image.createGraphics(); int framesize = width * height * 2; int output[] = new int[width * height]; for (int i = 0, j = 0; i < framesize; i += 4, j += 2) { int y1 = yuyvData[i] & 0xff; int u = yuyvData[i + 1] & 0xff; int y2 = yuyvData[i + 2] & 0xff; int v = yuyvData[i + 3] & 0xff; y1 = y1 < 16 ? 16 : y1; y2 = y2 < 16 ? 16 : y2; u -= 128; v -= 128; int r1 = (int) (1.164 * y1 + 1.596 * v); int g1 = (int) (1.164 * y1 - 0.813 * v - 0.391 * u); int b1 = (int) (1.164 * y1 + 2.018 * u); int r2 = (int) (1.164 * y2 + 1.596 * v); int g2 = (int) (1.164 * y2 - 0.813 * v - 0.391 * u); int b2 = (int) (1.164 * y2 + 2.018 * u); r1 = r1 < 0 ? 0 : (r1 > 255 ? 255 : r1); g1 = g1 < 0 ? 0 : (g1 > 255 ? 255 : g1); b1 = b1 < 0 ? 0 : (b1 > 255 ? 255 : b1); r2 = r2 < 0 ? 0 : (r2 > 255 ? 255 : r2); g2 = g2 < 0 ? 0 : (g2 > 255 ? 255 : g2); b2 = b2 < 0 ? 0 : (b2 > 255 ? 255 : b2); output[j] = (r1 << 16) | (g1 << 8) | b1; output[j + 1] = (r2 << 16) | (g2 << 8) | b2; } g2d.drawImage(image, 0, 0, null); g2d.dispose(); return image; } } ``` 在这个示例中,我们首先创建一个`BufferedImage`对象,然后使用`Graphics2D`对象创建一个图形上下文。接下来,我们定义一些变量来存储YUYV数据的每个像素的值,然后使用公式将它们换为RGB值。最后,我们将RGB值设置为`output`数组的值,并将`image`对象绘制到图形上下文中,然后将其释放。最后,我们返回换后的图像

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值