c语言 - bmp图像如何用c/c++处理?
巴扎黑
巴扎黑 2017-04-17 13:09:18
[C++讨论组]

求代码,用c/c++进行bmp图像的处理,处理内容包括旋转,灰度图,二值图等等。

巴扎黑
巴扎黑

全部回复(5)
伊谢尔伦

使用Windows Imaging Component读取图片(兼容bmp、jpg、png等常见格式)

1、使用CoCreateInstance创建IWICImagingFactory
2、使用IWICImagingFactory::CreateDecoderFromFilename创建一个IWICBitmapDecoder
3、使用IWICBitmapDecoder::GetFrame获得一个IWICBitmapFrameDecoder
4、使用IWICImagingFactory::CreateFormatConverter创建一个IWICFormatConverter,并使用你喜爱的格式初始化他,使用第三步创建好的对象调用IWICFormatConverter::Initialize函数
5、如果第四步成功了,那么就把IWICFormatConverter转成IWICBitmapSource,否则就把IWICBitmapFrameDecoder转成IWICBitmapSource
6、使用IWICImagingFactory::CreateBitmapFromSource从IWICBitmapSource获取IWICBitmap

使用Direct2D获取图形

鉴于d2d资料较多,请自行查找。首先就是创建一个空的位图,然后使用这个位图创建ID2D1RenderTarget,然后使用ID2D1RenderTarget::CreateBitmapFromWicBitmap,从刚才获取的IWICBitmap创建出一个ID2D1Bitmap。这样你就拥有了两个bitmap,第一个是从文件里面读进来的,第二个是你创建的一个空白bitmap。最后使用render target的各种effect、shader和函数,就使用你喜欢的任何效果,譬如旋转、灰度、二值等,把读进来的bitmap画到空白的bitmap上去。最后把bitmap一保存,就搞定了。

总结

最困难的部分就是读写文件,效果什么的都是现成的。Direct2D比GDI+还要好用,性能还高,而且绝不兼容Windows XP。

大家讲道理

OpenCV吧

PHP中文网

有两种方式,
1 用第三方库,除了上面提到的之外,还可以选skia

2 网上搜一段读bmp到二维数组的代码以及写二维数组到bmp的代码,你需要功能比较简单,完全可以自己实现。旋转靠的是矩阵转换和插值,灰度图和二值图直接根据定义计算就可以了。

阿神

opencv gdal

怪我咯

BMP的数据,没有任何压缩,都是放在文件头之后的地方,手解没难度。其主要是文件头+数据。而且文件头也没有什么难度,很清晰,具体地BMP头,楼主可以去搜索一下。

建议楼主如果时间上来得及,可以手解,这样可以更加了解BMP文件的格式。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号