文档章节

图像库stb_image

robslove
 robslove
发布于 01/20 17:20
字数 448
阅读 11
收藏 0

https://github.com/nothings/stb

目前一般主流的图像格式也就是bmp,jpg,png,tga,dds,除了DDS一般是给DX用的,虽然一堆OpenGL程序也有用的,但是我一般只用png和tga,

png不用说了,带alpha通道,tga就是4通道信息,如果你想3通道存颜色,4通道不存透明而是别的什么信息,又有编辑器如Photoshop支持的,tga就用得着,而png虽然

也能存alpha,但是编辑器不支持Alpha单独编辑那种诡异玩法就不行了。然尔一般也就png。所以来吃狗!!!

简单的写个,读写png的例子,精简自自带例子,(0,0)是左上角像素

 

#include <stdio.h>

#define STB_IMAGE_WRITE_IMPLEMENTATION
#include "stb_image_write.h"

#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"

int main(int argc, char** argv)
{
    int w, h, n;

    //rgba
    //load image
    unsigned char *data = stbi_load("rgba.png", &w, &h, &n, 0);

    printf("%d, %d, %d\n", w, h, n);

    //change pixel

    //rgba,write 10 red pixel at line 11
    for (int dx = 0; dx < 10; ++dx)
    {
        data[n * w * 10 + dx * n + 0] = 255;
        data[n * w * 10 + dx * n + 1] = 0;
        data[n * w * 10 + dx * n + 2] = 0;
        data[n * w * 10 + dx * n + 3] = 255;
    }
    

    //write image
    stbi_write_png("write.png", w, h, n, data, w * 4);

    stbi_image_free(data);


    return 0;
}

 

#include <iostream>
#include <fstream>
#include <stbi/stb_image.h>

const unsigned char * loadfile(const std::string &file, int &size)
{
    std::ifstream fs(file.c_str(), std::ios::binary);
    fs.seekg(0, std::ios::end);
    size = fs.tellg();
    char * data = new char[size + 1];
    fs.seekg(0);
    fs.read(data, size);
    fs.close();
    data[size] = 0;
    return (unsigned char *)data;
}


int main()
{
    int w;
    int h;
    int channels;
    int size;
    const unsigned char * data = loadfile("D:/1.jpg", size);
    const unsigned char * logo = stbi_load_from_memory(data, size, &w, &h, &channels, 0);
    for (int i = 0; i < 3; ++i)
    {
        std::cout << (int)logo[i] << std::endl;
    }
}

 

© 著作权归作者所有

共有 人打赏支持
robslove

robslove

粉丝 4
博文 187
码字总数 79008
作品 0
成都
程序员
私信 提问
UITabBarController和UINavigationController 的结合使用

1.首先,新建一个继承UITabBarController的类MainTabBarController(ps:名字可修改)。右键NewFile->cocoa touch class->next 2.新建TabBarController 的ViewControllers(这里新建两个继承与......

薛定谔与猫的故事
2017/11/28
0
0
C,C++ 动态字符串的实现

一. 字符串的思考 开发者经常需要使用字符串进行操作,相对于 C/C++,很多语言提供了完备的字符串解析类库,正是由于这一点,许多开发者也就偏好这些语言。 大多数时候,C 库的字符串操作函数...

Force武装卫队
2015/08/28
357
1
2014 年 10 个最佳的 PHP 图像操作库

Thomas Boutell和众多的开发者发明了被称作GD图形库的图形软件库,它是用来动态处理图片的。GD提供了对众多编程语言的支持,例如C,Perl,Python,PHP,OCaml等。除了产生HTML输出之外,你也能用...

oschina
2014/05/06
8.1K
36
3.python数据分析及展示-----图像的手绘效果

1.图像的数组表示 图像一般使用RGB色彩模式,即每个像素点的颜色由红(R)、绿(G)、蓝(B)组成。 RGB三个颜色通道的变化和叠加得到各种颜色,其中 •R 红色,取值范围,0‐255 •G 绿色,取值范...

bxg1065283526
2018/04/28
0
0
Python图像处理库--PIL

PythonWare公司提供了免费的图像处理工具包PIL(Python Image Library),该软件包提供了基本的图像处理功能,如:改变图像大小,旋转图像,图像格式转换,色场空间转换,图像增强,直方图处理,...

匿名
2011/08/16
11K
0

没有更多内容

加载失败,请刷新页面

加载更多

学习设计模式之路

https://java-design-patterns.com/patterns/ https://www.oodesign.com/ https://www.programering.com/a/MTNxAzMwATY.html https://design-patterns.readthedocs.io/zh_CN/latest/ https:/......

晨猫
今天
1
0
JDK1.8 jar包说明

JDK 1.8 lib:access-bridge-64.jarcharsets.jarcldrdata.jardeploy.jardnsns.jarjaccess.jarjavawa.jarjce.jarjfr.jarjfxrt.jarjfxswt.jarjsse.jarlocaledata.jar......

冷基
今天
1
0
判断用户的icloud是否开启【Swift4.2】

使用icloudkit存储用户私人数据时,必须判断用户的icloud是否开启【Swift4.2】 func isICloudContainerAvailable()-> Bool { if FileManager.default.ubiquityIdentityToken != ni......

叶落花开
今天
2
0
今天的学习

1、执行git add *命令就把改动提交到了暂存区,执行git pull命令将远程仓库的数据拉到当前分支并合并,执行git checkout [branch-name]切换分支 2、执行git commit -m '说明' 命令就把改动提...

墨冥
昨天
0
0
Android4.4 及以下TextView,Button等控件使用矢量图报错

1 问题描述 最近项目开发中,图标资源我尽量使用了矢量图,然而配置了基本的兼容设置,程序在低版本中运行还是出现了问题。 xml布局文件中,在TextView中使用矢量图,比如android:drawableS...

newtrek
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部