C语言 读取jpg格式图片c语言 bmp 像素值读取

c语言中如何读取图像的每个像素点的灰度值 - 爱问知识人
(window.slotbydup=window.slotbydup || []).push({
id: '2491531',
container: s,
size: '150,90',
display: 'inlay-fix'
中如何读取图像的每个像素点的灰度值
大家还关注
为什么输出的结果是这样? #includ...
有以下程序 main()
<a href="/b/.html" target="_blank" class="trackEventQuestion" trackType="PC_问题详细页" trackAction="跳转" trackDes="PC_大家还关注" title="请详细说明 设有定义
a=2,b=3,c=4,则以下选项的值都是多少 并详细说明
A !(a==1)&&(!b==0)
B (a请详细说明 设有定义&#xe621; 上传我的文档
&#xe602; 下载
&#xe60c; 收藏
该文档贡献者很忙,什么也没留下。
&#xe602; 下载此文档
正在努力加载中...
[精品]vb如何读取jpg文件某点的像素值
下载积分:280
内容提示:[精品]vb如何读取jpg文件某点的像素值
文档格式:TXT|
浏览次数:60|
上传日期: 11:07:18|
文档星级:&#xe60b;&#xe60b;&#xe612;&#xe612;&#xe612;
该用户还上传了这些文档
[精品]vb如何读取jpg文件某点的像素值
官方公共微信c语言如何读取jpg图片长度
c语言有没有办法读取jpg图片长度
08-10-29 &匿名提问
C++Builder/DELPHI中有TImage类支持,可以考虑做成DLL来用。
请登录后再发表评论!如何才能通过读JPG文件头的方式,取得图片的像素值和DPI值 - PB当前位置:& &&&如何才能通过读JPG文件头的方式,取得图片的像素值如何才能通过读JPG文件头的方式,取得图片的像素值和DPI值&&网友分享于:&&浏览:794次怎么才能通过读JPG文件头的方式,取得图片的像素值和DPI值怎么才能通过读JPG文件头的方式,取得图片的像素值和DPI值------解决方案--------------------
JPEG委员会在制定JPEG标准时,定义了许多标记(marker)用来区分和识别图像数据及其相关信息,但笔者没有找到JPEG委员会对JPEG文件交换格式的明确定义。直到1998年12月从分析网上具体的JPG图像来看,使用比较广泛的还是JPEG文件交换格式(JPEG File Interchange Format,JFIF)版本号为1.02。这是1992年9月由在C-Cube Microsystems公司工作的Eric Hamilton提出的。此外还有TIFF JPEG等格式,但由于这种格式比较复杂,因此大多数应用程序都支持JFIF文件交换格式。& JPEG文件使用的颜色空间是CCIR 601推荐标准进行的彩色空间(参看第7章)。在这个彩色空间中,每个分量、每个像素的电平规定为255级,用8位代码表示。从RGB转换成YCbCr空间时,使用下面的精确的转换关系:       Y = 256 * E'y      Cb = 256 * [E'Cb] + 128      Cr = 256 * [E'Cr] + 128其中亮度电平E'y和色差电平E'Cb和E'Cb分别是CCIR 601定义的参数。由于E'y的范围是0~1,E'Cb和E'Cb的范围是-0.5~+0.5,因此Y, Cb和Cr的最大值必须要箝到255。于是RGB和YCbCr之间的转换关系需要按照下面的方法计算。(1) 从RGB转换成YCbCrYCbCr(256级)分量可直接从用8位表示的RGB分量计算得到:       Y =   0.299 R + 0.587 G  + 0.114 B     Cb = - 0.1687R - 0.3313G  + 0.5   B + 128    Cr = 0.5 R - 0.4187G - 0.0813 B + 128需要注意的是不是所有图像文件格式都按照R0,G0,B0,…… Rn,Gn,Bn的次序存储样本数据,因此在RGB文件转换成JFIF文件时需要首先验证RGB的次序。(2) 从YCbCr转换成RGB& RGB分量可直接从YCbCr(256级)分量计算得到:     R = Y                 + 1.402 (Cr-128)      G = Y - 0.34414 (Cb-128) - 0.71414 (Cr-128)      B = Y + 1.772 (Cb-128)在JFIF文件格式中,图像样本的存放顺序是从左到右和从上到下。这就是说JFIF文件中的第一个图像样本是图像左上角的样本。2 文件结构JFIF文件格式直接使用JPEG标准为应用程序定义的许多标记,因此JFIF格式成了事实上JPEG文件交换格式标准。JPEG的每个标记都是由2个字节组成,其前一个字节是固定值0xFF。每个标记之前还可以添加数目不限的0xFF填充字节(fill byte)。下面是其中的8个标记:SOI  0xD8            图像开始& APP0 0xE0            JFIF应用数据块& APPn 0xE1 - 0xEF    其他的应用数据块(n, 1~15)& DQT  0xDB           量化表& SOF0 0xC0            帧开始& DHT  0xC4           霍夫曼(Huffman)表& SOS  0xDA           扫描线开始& EOI  0xD9            图像结束为使读者对JPEG定义的标记一目了然,现将JPEG的标记码列于表6-05,并保留英文解释。表6-05 JPEG定义的标记Symbol& (符号) &Code Assignment(标记代码) &Description(说明) &Start Of Frame markers, non-hierarchical Huffman coding &SOF0 &0xFFC0 &Baseline DCT &SOF1 &0xFFC1 &Extended sequential DCT &SOF2 &0xFFC2 &Progressive DCT &SOF3 &0xFFC3 &Spatial (sequential) lossless&
&Start Of Frame markers, hierarchical Huffman coding &SOF5 &0xFFC5 &Differential sequential DCT &SOF6 &0xFFC6 &Differential progressive DCT &SOF7 &0xFFC7 &Differential spatial lossless &Start Of Frame markers, non-hierarchical arithmetic coding &JPG &0xFFC8 &Reserved for JPEG extensions &SOF9 &0xFFC9 &Extended sequential DCT &SOF10 &0xFFCA &Progressive DCT &SOF11 &0xFFCB &Spatial (sequential) Lossless &Start Of Frame markers, hierarchical arithmetic coding &SOF13 &0xFFCD &Differential sequential DCT &SOF14 &0xFFCE &Differential progressive DCT &SOF15 &0xFFCF &Differential spatial Lossless &Huffman table specification &DHT &0xFFC4 &Define Huffman table(s) &arithmetic coding conditioning specification &DAC &0xFFCC &Define arithmetic conditioning table &Restart interval termination &RSTm &0xFFD0~0xFFD7 &Restart with modulo 8 counter m &Other marker &SOI &0xFFD8 &Start of image & 共&3&页:
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有最近研究C语言图像处理这方面遇到一个难题,详情如下:
目标: 将png类型图片的信息读入内存,提取所需要的数据并保存,然后转换为如jpg等其它图片格式。
libpng库已经装好,通过makefile调用库文件路径也正确。
写了一个读取函数, 如下:
#include &stdio.h&#include &stdlib.h&#include &string.h&#include &unistd.h&#include &time.h&#include &inttypes.h& #include "png.h" #include "pngio.h"#include "error.h"#include "image.h"
/*==============================================================================* *
* *==============================================================================*/ int x, int width,
png_byte color_png_byte bit_ png_structp png_png_infop info_int number_of_png_bytep *row_
png_uint_32 w,size_//png_uint_32*//png_uint_32
int read_png (char * input_filename, picture *thePicture, FILE *status_log){
int err = no_
char header[8];
// 8 is the maximum size that can be checked
/* open file and test for it being a png */
FILE *fp = fopen(input_filename, "rb");
//abort_("[read_png_file] File %s could not be opened for reading", file_name);
fread(header, 1, 8, fp);
/* checked out with a proper PNG signature */
if (png_check_sig(header, 8)){
/* initialize stuff */
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (png_ptr){
info_ptr = png_create_info_struct(png_ptr);
if (info_ptr){
if (setjmp(png_jmpbuf(png_ptr))){
fprintf(status_log, "Error during init_io. \n");
//takes our file stream pointer(fp) and stores it in the png_ptr struct for later use.
png_init_io(png_ptr, fp);
//lets libpng know that we already checked the 8 signature bytes
png_set_sig_bytes(png_ptr, 8);
//information is stored in the information struct
png_read_info(png_ptr, info_ptr);
//png_read_update_info(png_ptr, info_ptr);
width = png_get_image_width(png_ptr, info_ptr);
height = png_get_image_height(png_ptr, info_ptr);
//w = png_get_image_width(png_ptr, info_ptr);
//h = png_get_image_height(png_ptr, info_ptr);
fprintf(status_log,"png-image-details: width=%i - height=%i\n",width,height);
//npixels = width *
npixels = width *
/* Read the whole image into memory at once. */
/* read file */
if (setjmp(png_jmpbuf(png_ptr)))
fprintf(status_log, "Error during read_image. \n");
png_uint_32 *raster = malloc(npixels * 4 *sizeof(png_uint_32));
//row_pointers = (png_bytep*) malloc(npixels * sizeof(png_bytep));
row_pointers = (png_bytep*) malloc(sizeof(png_bytep) * height);
for (y=0; y& y++)
row_pointers[y] = (png_byte*) malloc(png_get_rowbytes(png_ptr,info_ptr));
png_read_image(png_ptr, row_pointers);
if(raster != NULL){
channels = png_get_channels(png_ptr, info_ptr);
fprintf(status_log,"Bild-Kanal ist %d .\n", channels);
fprintf(status_log,"Bild ist geladen\n");
thePicture-&pixelmap = row_
thePicture-&width =
thePicture-&height =
thePicture-&type = png_
fprintf(status_log,"Memory error.\n");
err = mem_
fclose(fp);
fprintf(status_log, "png_create_info_struct failed. \n");
//err = mem_
fprintf(status_log, "png_create_read_struct failed. \n");
fprintf(status_log, "checking PNG failed. \n");
fprintf(status_log,"Error. Fail to open the png.\n");
err = file_
测试结果如下:
原png图片:
转换后jpg:
请问是什么原因造成这样的效果,代码有什么地方需要修改吗?
先谢谢了。
该问题被发起重新开启投票
投票剩余时间:
之前被关闭原因:
该问题被发起删除投票
投票剩余时间:
距离悬赏到期还有:
参与关闭投票者:
关闭原因:
该问题已经被锁定
锁定原因:()
保护原因:避免来自新用户不合宜或无意义的致谢、跟帖答案。
该问题已成功删除,仅对您可见,其他人不能够查看。
德问是一个专业的编程问答社区,请
后再提交答案
关注该问题的人
共被浏览 (1487) 次

我要回帖

更多关于 c语言 读取jpg 源代码 的文章

 

随机推荐