返回顶部
首页 > 资讯 > 精选 >高效地将RBGA图像转换为RGB字节数组
  • 353
分享到

高效地将RBGA图像转换为RGB字节数组

标准库 2024-02-06 05:02:19 353人浏览 独家记忆
摘要

问题内容 我有一个 c 库和函数,需要一个指向包含 rgb 格式的 24 位位图的字节数组的指针。 alpha 通道并不重要,可以被截断。我尝试过这样的事情: func load(fi

问题内容

我有一个 c 库和函数,需要一个指向包含 rgb 格式的 24 位位图的字节数组的指针。 alpha 通道并不重要,可以被截断。我尝试过这样的事情:

func load(filePath string) *image.RGBA {
    imgFile, err := os.Open(filePath)
    if err != nil {
        fmt.Printf("Cannot read file %v\n", err)
    }
    defer imgFile.Close()

    img, _, err := image.Decode(imgFile)
    if err != nil {
        fmt.Printf("Cannot decode file %v\n", err)
    }
    return img.(*image.RGBA)
}

    img := load("myimg.png")

    bounds := img.Bounds()
    width, height := bounds.Max.X, bounds.Max.Y

    // Convert to RGB? Probably not...
    newImg := image.NewNRGBA(image.Rect(0, 0, width, height))
    draw.Draw(newImg, newImg.Bounds(), img, bounds.Min, draw.Src)
    // Pass image pointer to C function.
    C.PaintOnImage(unsafe.Pointer(&newImg.Pix[0]), C.int(newImg.Bounds().Dy()), C.int(newImg.Bounds().Dx())

但是,nrgba 似乎也是建立在每个像素 4 个字节的基础上的。我可以通过使用 Gocv 来解决这个问题,但这对于如此简单的任务来说似乎有点矫枉过正。有没有办法在 go 中以简单有效的方式做到这一点?


正确答案


标准库中没有 rgb 图像类型,但您可以非常轻松地组装 rgb 数组:

bounds := img.bounds()
rgb := make([]byte, bounds.dx()*bounds.dy()*3)
idx := 0
for y := bounds.min.y; y < bounds.max.y; y++ {
    for x := bounds.min.x; x < bounds.max.x; x++ {
        offs := img.pixoffset(x, y)
        copy(rgb[idx:], img.pix[offs:offs+3])
        idx += 3
    }
}

img.pix 数据保存 4 字节 rgba 值。上面的代码只是复制所有像素的前 3 字节 rgb 值。

由于 pix 数组中的行是连续的,因此可以通过每行仅调用 pixoffset 一次来改进上述代码,并且每个像素前进 4 个字节。另外,手动复制 3 个字节可能比调用 copy() 更快(如果对您很重要,则为基准):

bounds := img.Bounds()
rgb := make([]byte, bounds.Dx()*bounds.Dy()*3)
idx := 0

for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
    offs := img.PixOffset(bounds.Min.X, y)
    for x := bounds.Min.X; x < bounds.Max.X; x++ {
        rgb[idx+0] = img.Pix[offs+0]
        rgb[idx+1] = img.Pix[offs+1]
        rgb[idx+2] = img.Pix[offs+2]
        idx += 3
        offs += 4
    }
}

以上就是高效地将RBGA图像转换为RGB字节数组的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 高效地将RBGA图像转换为RGB字节数组

本文链接: https://lsjlt.com/news/561190.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 高效地将RBGA图像转换为RGB字节数组
    问题内容 我有一个 c 库和函数,需要一个指向包含 rgb 格式的 24 位位图的字节数组的指针。 alpha 通道并不重要,可以被截断。我尝试过这样的事情: func load(fi...
    99+
    2024-02-06
    标准库
  • 将字节数组转换为 uintptr
    小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《将字节数组转换为 uintptr》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!问题内...
    99+
    2024-04-05
  • Python 将RGB图像转换为Pytho灰度图像的实例
    问题: 我正尝试使用matplotlib读取RGB图像并将其转换为灰度。 在matlab中,我使用这个: img = rgb2gray(imread('image.png')); 在matplot...
    99+
    2022-06-04
    图像 灰度 转换为
  • 如何高效地将Tensor转换为Numpy数组
    如何高效地将Tensor转换为Numpy数组 TensorFlow是当下最流行的深度学习框架之一,而Numpy则是Python中广泛使用的科学计算库。在深度学习的实践过程中,我们常常需要将TensorFlow中的Tensor对象...
    99+
    2024-01-26
  • 使用 PHP 将数组高效转换为 JSON
    将 php 数组转换为 json 的高效方法:使用 json_encode() 函数,语法:json_encode($value)使用 serialize() 和 json_decode...
    99+
    2024-05-01
    json 转换 格式化输出
  • php将数字转换为数组
    我们知道,在编程中,数字和数组是两个不同的概念。数字是表示数值的基本单位,而数组则是存储多个数据项的集合。有时我们需要把数字转换成数组。在PHP中,实现这一过程非常简单。PHP提供了许多内置的函数,可以轻松地将数字转换为数组。以下是一些常用...
    99+
    2023-05-19
  • Python实现将图像转换为ASCII字符图
    目录1. 引言2. ASCII字符映射表3. 计算单个像素亮度4. 将像素转换为ASCII字符5. 转换图像6. 结果输出7. 主函数调用8. 效果展示9. 总结1. 引言 使用Py...
    99+
    2024-04-02
  • golang如何将字节数组转为string
    今天小编给大家分享一下golang如何将字节数组转为string的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、字节数组转...
    99+
    2023-07-05
  • PHP将字符串转换为数组
    这篇文章将为大家详细讲解有关PHP将字符串转换为数组,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP 字符串转换为数组 在 PHP 中,字符串可以轻松地转换为数组。有多种内置函数和方法可以执行此操作,...
    99+
    2024-04-02
  • golang如何将字符串转为字节数组
    这篇文章主要介绍“golang如何将字符串转为字节数组”,在日常操作中,相信很多人在golang如何将字符串转为字节数组问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”golang如何将字符串转为字节数组”的疑...
    99+
    2023-07-05
  • golang怎么将字节数组(byte)转为string
    Go语言是一个强大的编程语言,因其资源效率高、跨平台支持好、并发性能优良等特点而备受开发者的欢迎。在Go语言中,字节数组(byte)转字符串(string)是一个常见操作,通常我们使用内置的函数进行转换。本篇文章就来介绍Go语言中字节数组和...
    99+
    2023-05-14
    go语言 Golang
  • golang中如何将string转为字节数组
    这篇“golang中如何将string转为字节数组”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“golang中如何将stri...
    99+
    2023-07-05
  • 怎么使用Vue.js将数据转换为字节
    这篇“怎么使用Vue.js将数据转换为字节”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用Vue.js将数据转换为字节...
    99+
    2023-07-06
  • 如何在 Go 中将整数转换为字节
    Golang不知道大家是否熟悉?今天我将给大家介绍《如何在 Go 中将整数转换为字节》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出...
    99+
    2024-04-05
  • golang怎么将字符串转为字节数组(byte)
    Golang是一门强大的编程语言,拥有许多有用的库和函数。其中有一个非常有用的功能是将字符串转换为字节数组。在本篇文章中,我们将深入探讨如何使用Golang函数将字符串转换为字节数组。Golang提供了几种将字符串转换为字节数组的方法。其中...
    99+
    2023-05-14
    go语言 Golang 字符串
  • C#中怎么将字节数组转换成字符串
    C#中怎么将字节数组转换成字符串,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。C#字节数组转换成字符串如果还想从 System.String 类中找到方法进行字符串和字节数组之...
    99+
    2023-06-17
  • golang中怎么将string转为字节数组(byte)
    Go语言是一门新兴的高效编程语言,被广泛应用于各种领域,特别是服务器端开发。其中,字符串处理是Go语言中的一个重要部分。本文将介绍如何将字符串转换为字节数组(byte),即 golang string 转 byte。什么是字节数组?在Go语...
    99+
    2023-05-14
    Golang go语言
  • php怎么将字符串转换为数组
    php将字符串转换为数组的方法:1、使用explode()函数转换成数组,语法格式为“explode(separator,string,limit)”;2、使用str_split()函数把字符串分割到数组中,语法格式为:“str_split...
    99+
    2024-04-02
  • javascript怎么将数组转换为字符串
    这篇文章主要介绍了javascript怎么将数组转换为字符串,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。javascript将数组转换为字符串的方法:1、使用join()函...
    99+
    2023-06-15
  • java怎么将字符串转换为数组
    在Java中,你可以使用`toCharArray()`方法将字符串转换为字符数组。以下是一个示例:```javaString str...
    99+
    2023-09-22
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作