当前位置:首页 » 图片资讯 » cimage如何在图片输出文字
扩展阅读
美女健身跳河视频 2023-08-31 22:08:21
西方贵族美女照片真人 2023-08-31 22:08:15

cimage如何在图片输出文字

发布时间: 2022-12-09 02:29:49

⑴ 如何用C#给动态GIF图片加文字

1)创建一个image对象,从你的gif文件
2)根据image对象创建一个Graphics对象g
g.FromImage(image)
3)写字符串:
g.DrawString(drawString, drawFont, drawBrush, drawPoint)
4)保存到图片文件:
image.Save(String, ImageFormat)
====
每一步都可以在vs.net里按F1搜索MSDN,学习中去完成

⑵ MFC怎样实现利用按钮加载图片 然后输出

给你个思路具体还是自己写吧:
1.通过按钮点击后打开filedialog获取图片路径
2.用cbitmap加载这个位图(如果图片不是bmp建议用cimage加载)
3.获取要显示的位置(在对话框的onpain函数中用stretchblt拉伸或者压缩图片到你指定的位置)
4.删除设置个标志位当这个标志位TRUE 时刷新界面不去stretchblt
这只是个思路如果想学点东西建议自己写,如果只是使用可以去网上下一些例子如显示图片的EDIT等当然也可以通过学习他们如何写的模仿下

⑶ CImage使用问题,各位高手帮帮忙,急!

你在代码中写的是相对路径
在Ctrl+F5时,程序默认运行路径是在工程文件.vcproj所在路径,一般是代码所在路径,该路径下有res\company.png图片文件
而在Debug目录下运行时,运行路径就是Debug目录,该目录下没有res\company.png图片,因此以相对路径执行Load会出错

⑷ Core Image使用指南

Core Image是一个图片处理及分析库,里面封装了非常易用的API,比如大量常用滤镜。因为它借助GPU或者CPU渲染,所以可以接近实时的速度处理静态图片和视频图片,图片可来自Core Graphics、Core Video以及I/O框架。

Core Image提供的能力包括:

一个滤镜在语义上表示某种能力,当作用在一张图片上时,可以经过某种变换从而得到另一张图片。

我们都知道,图片在计算机中是以像素为基本单位而保存的像素矩阵,通过图像处理单元GPU才能将其显示在屏幕上。在数学上,滤镜其实也是一个矩阵,也叫卷积核,通常比图片的像素矩阵维度小得多。在真正处理图片时,图片像素矩阵和卷积核做卷积运算,最终输出一个“新”图片。

顾名思义,滤镜链就是将多个滤镜链接在一起,前一个滤镜的输出作为下一个滤镜的输入,就像流水线一样,图片从第一个滤镜中进入,处理之后再进入下一个,一直到最后一个滤镜。通过这种方式,可以创建出更加如何需求的效果。

但实际上,Core Image的处理逻辑有点不同,它并不会让一张图片经过多次处理。为了性能考虑,Core Image会先将多个滤镜的卷积核合成为一个,然后一次性得出最终的结果。

简单来说,图片处理就是将某张图片作用于某个滤镜的过程。

在Core Image中,图片为CIImage,滤镜为CIFilter,为滤镜设置参数要通过KVC实现。同时,还需要一个上下文对象CIContext,里面保存着所有相关的细节。因为这些细节非常多,所以最好在合适的时机创建一个可重复利用的CIContext对象。

最基本的用法就是只使用单个滤镜,如下所示。

在CoreImage中所有相关操作中只能使用CIImage这个格式,但是它并不能直接呈现给用户,因为 CIImage只是一种用来生产图片的“配方”,其实就是一种操作流程,比如从URL读取图片文件,某个滤镜操作的输出等,只有在渲染或者输出时才会开始执行 。总结下来,可以通过下面这些方法创建CIImage:

Core Image中有大量的滤镜,而且随着系统的不断升级,还在不断添加新的滤镜。系统将它们分为以下这些类别:

把这些功能组合在一起,基本可以实现一个Photoshop了。

前面说了,当要经过多个滤镜的处理时,CoreImage为了提高性能会将多个滤镜合成为一个,并在合适时机完成处理。

例如,如果分步处理,其流程如下:

但如果合成为一个Filter,则其流程如下:

Core Image除过用 CFilter 来处理图片外,还可以通过一些预定义的方法直接处理图片,将更加简便。比如:

在图片识别处理中,如果要识别特定对象,一般都要先进行轮廓检测,然后再根据轮廓剪裁后识别物体,这样会更加高效准确。比如人脸、矩形等对象的识别。在Core Image中,提供了开箱即用的轮廓检测功能,其中只能进行三类操作:人脸、矩形、文字。下面看看人脸检测的使用方法:

经过使用发现,只要当图片中含有少量人时结果比较准确,当图片清晰度降低、并且人较多时结果不一定准确。

为了提高应用程序的性能,在使用Core Image时尽可能注意以下细节:

⑸ vs2010 vb项目中如何向图片给添加文字

1)PictureBox中没有Print方法,如果你要存储PictureBox中的图片到某个地方,可以这样做: pictureBox1.Image.Save("C:\\image.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); 2)给图片加文字: Image img = Image.FromFile("c:\\Hydrangeas.jpg"); //原来的图片 Graphics g = Graphics.FromImage(img); //读入到临时画图区域 //加上说明性文字 g.DrawString("这是介绍图片的文字", new Font("黑体", 20.0f), Brushes.LightCyan, new PointF(img.Height / 2, img.Width / 2)); //保存 g.Save(); //输出 img.Save("C:\\try.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

⑹ 如何将CImage对象中的图像数据提取出来

使用jpg或者png图片,则需要用到symbian提供的那个Multimedia ICL库里的类了。其中比较重的是CImageDecoder类,提供了对图像进行解码的功能。

来看看如何使用它的吧。先定义两个字串:

_LIT(KJPEGFile,"C:\\Data\\me.jpg");
_LIT(KJPEGType,"image/jpeg");

⑺ 如何使用C语言实现JPEG图像格式的读取与写入

1.图片也是属于文件类型的一种,图片属于二进制文件。使用fopen函数的二进制模式“rb”就可以打开。

2.例程:

#include<stdlib.h>
#include<stdio.h>
intmain()
{
FILE*fpPhoto,*fpText,*fpTarget;
intiRead;
charszBuf[100];

printf("请输入第一个文件名(bmp): ");
gets(szBuf);
fpPhoto=fopen(szBuf,"rb");
printf("请输入第二个文件名(txt): ");
gets(szBuf);
fpText=fopen(szBuf,"rb");
printf("请输入目的文件名(bmp): ");
gets(szBuf);
fpTarget=fopen(szBuf,"wb");

if(!fpPhoto||!fpText||!fpTarget)
{
printf("打开文件失败! ");
system("pause");
return-1;
}

while((iRead=fread(szBuf,1,sizeof(szBuf),fpPhoto))>0)
fwrite(szBuf,1,iRead,fpTarget);
while((iRead=fread(szBuf,1,sizeof(szBuf),fpText))>0)
fwrite(szBuf,1,iRead,fpTarget);

fclose(fpPhoto);
fclose(fpText);
fclose(fpTarget);
return0;
}

⑻ VC 实现 输出 Bmp 图像中所有像素点的灰度值到文本

//VC++6.0调试通过。但是由于本人最近较忙,所以只做了处理24位位图和32位位图的功能,1、4、8、16位位图从原理上来说是一样的,不过情况稍微复杂一点。你自己解决吧。

//注意,运行时必须要在控制台(cmd窗口)运行,如果直接在编译器那里编译时,是看不到希望的结果的。有问题的话这两天可以网络找我,再过几天就回家了,得明年才回来。

#include<windows.h>
#include<iostream>
#include<fstream>
#include <iomanip>
using namespace std;
/*
位图文件分四个部分:
1.文件头
2.文件信息头
3.调色板
4.实际位图数据

//位图文件文件头,2*3+4*2=14字节
typedef struct tagBITMAPFILEHEADER
{
WORD bfType;//文件类型,必须为0x424D,由于WORD类型存放数据是先低字节、再高字节,所以实际上在判断时要用0x4d42(见代码,或者可直接用10进制的数19778),即"BM",'B'=0x42,'M'='0x4d'
DWORD bfSize;//文件大小
WORD bfReserved1;//保留字,必须设置为0,可不考虑,下同
WORD bfReserved2;
DWORD bfOffBits;//文件头到实际位图数据的偏移字节数,即前三部分长度之和
}BITMAPFILEHEADER;

//文件信息头,2*2+4*9=40字节
typedef struct tagBITMAPINFOHEADER
{
DWORD biSize;//此结构长度,为40
LONG biWidth;//图像宽度,单位为像素
LONG biHeight;//图像高度,单位为像素
WORD biPlanes;//必须为1
WORD biBitCount;//颜色位数,常用有:1(黑白2色图)、4(16色图)、8(256色图)、24(真彩色图)。新bmp格式还支持32位(增强型真彩色图)
DWORD biCompression;//指定位图是否压缩,有效值:BI_RGB、BI_RLE8、BI_RLE4、BI_BITFIELDS,均为Windows定义好的常量
DWORD biSizeImage;//实际位图数据占用的字节数
LONG biXPelsPerMeter;//目标设备水平分辨率,单位:像素/米
LONG biYPelsPerMeter;//目标设备垂直分辨率,单位:像素/米
DWORD biClrUsed;//图像实际用的到颜色数,如果为0,则实际用到的颜色数为:2的biBitCount次方
DWORD biClrImportant;//重要的颜色数,为0时表示所有颜色都重要
}BITMAPINFOHEADER;

//位图调色板(真彩色不需要),是一个数组,共biClrUsed个元素,若该值为0,则共有2的biBitCount次方个元素。每个元素是一个颜色表结构:
//颜色表结构
typedef struct tagRGBQUAD
{
BYTE rgbBlue; //蓝色分量
BYTE rgbGreen; //绿色分量
BYTE rgbRed; //红色分量
BYTE rgbReserved;//保留值
}RGBQUAD;
*/
class CBmp
{
public:
//读图像文件信息
bool ReadInfo(char FilePath[]);
//写图像灰度信息到文本文件
bool WriteToTxt(char FilePath[]);

CBmp();
virtual ~CBmp();

private:
BITMAPFILEHEADER m_sBMFH; //位图文件头
BITMAPINFOHEADER m_sBMIH; //位图信息头
RGBQUAD * m_pPalette; //调色板
BYTE * m_pBData; //位图数据
};

CBmp::CBmp()
{
m_pPalette = NULL;
m_pBData = NULL;
}
CBmp::~CBmp()
{
if(m_pPalette!=NULL)
{
delete [] m_pPalette;
m_pPalette = NULL;
}
if(m_pBData!=NULL)
{
delete [] m_pBData;
m_pBData = NULL;
}
}

//读图像文件
bool CBmp::ReadInfo(char FilePath[])
{
int nSize; //用来记录调色板的大小
ifstream fin;
fin.open(FilePath,ios::binary);
if(!fin)
{
cerr<<"Open file error!"<<endl;
return false;
}
//读取文件头
fin.read((char *)(&m_sBMFH),sizeof(BITMAPFILEHEADER));
// 判断是否BMP格式
if(m_sBMFH.bfType!=0x4d42)
{
cout<<"该文件不是BMP格式的文件!"<<endl;
return false;
}
//读取文件信息头
fin.read((char *)(&m_sBMIH),sizeof(BITMAPINFOHEADER));
//计算调色板的大小
nSize = m_sBMFH.bfOffBits - sizeof(BITMAPFILEHEADER) - sizeof(BITMAPINFOHEADER);
if(nSize!=0)
{
//读取调色板
m_pPalette = new RGBQUAD [nSize/4];
fin.read((char *)(m_pPalette),nSize);
}
//读取图像数据
m_pBData = new BYTE [m_sBMIH.biSizeImage];
fin.read((char *)(m_pBData),m_sBMIH.biSizeImage);
return true;
}
//写图像灰度信息到文本文件
bool CBmp::WriteToTxt(char FilePath[])
{
// 选用的灰度转换公式不同,所得的结果基本上是一致的,但是会稍有差别。
// Gray = (R*38 + G*75 + B*15) >> 7; //高精度转灰度公式
// Gray = R*0.299 + G*0.587 + B*0.114 //使用浮点计算,速度较慢
int k = 0,i,j;
int r,g,b;
int Gray;
BYTE *pt;
ofstream fout;
int t=0;
j = strlen(FilePath);
char *TxtFilePath = new char [j+1]; //记录灰度值的文本文件路径
TxtFilePath[j-3] = 't';
TxtFilePath[j-2] = 'x';
TxtFilePath[j-1] = 't';
TxtFilePath[j] = '\0';
for(i=j-4;i>=0;i--)
TxtFilePath[i] = FilePath[i] ;
switch(m_sBMIH.biBitCount)
{
case 1: //1、4、8位的位图有调色板,要先读取调色板,根据索引找到真实的图像RGB值,再转换。
cout<<"黑白2色(1位)位图的处理暂未实现!"<<endl;
break;
case 4:
cout<<"16色(4位)位图的处理暂未实现!"<<endl;
break;
case 8:
cout<<"256色(8位)位图的处理暂未实现"<<endl;
break;
case 16: //16位位图无调色板,一般为前5位记录R值,中6位记录G值,后5位记录B值
cout<<"16位位图的处理暂未实现"<<endl;
break;
case 24:
if(m_sBMIH.biWidth*3%4!=0)t=4-m_sBMIH.biWidth*3%4; //位图数据要求每行字节数必须是4的倍数,不足补齐t
fout.open(TxtFilePath,ios::out);
for(i=m_sBMIH.biHeight-1;i>=0;i--)
{
fout<<"第"<<m_sBMIH.biHeight-i<<"行像素点的灰度值:\n";
for(j=0;j<m_sBMIH.biWidth;j++)
{
pt = m_pBData+i*(m_sBMIH.biWidth*3+t)+3*j ;
r = (int)(*pt);
g = (int)(*(pt+1));
b = (int)(*(pt+2));
// Gray = (r*0.299+g*0.587+b*0.114);
Gray = (r*38 + g*75 + b*15) >> 7;
fout<<setiosflags(ios::left)<<setw(4)<<Gray;
}
fout<<endl;
}
fout.close();
break;
case 32:
//每行字节数必是4的倍数,所以不用补齐
fout.open(TxtFilePath,ios::out);
for(i=m_sBMIH.biHeight-1;i>=0;i--)
{
fout<<"第"<<m_sBMIH.biHeight-i<<"行像素点的灰度值:\n";
for(j=0;j<m_sBMIH.biWidth;j++)
{
pt = m_pBData+i*(m_sBMIH.biWidth*4+t)+4*j ;
r = (int)(*pt);
g = (int)(*(pt+1));
b = (int)(*(pt+2));
// Gray = (r*0.299+g*0.587+b*0.114);
Gray = (r*38 + g*75 + b*15) >> 7;
fout<<setiosflags(ios::left)<<setw(4)<<Gray;
}
fout<<endl;
}
fout.close();
break;
default:
return false;
}
cout<<"灰度值记录在文件"<<TxtFilePath<<"中"<<endl;
delete [] TxtFilePath;
return true;
}

int main(int argc,char *argv[])
{
if(argc !=2 )
{
cout<<"输入参数错误,正确形式:\nyourprogram filePath"<<endl;
return 0;
}

CBmp Bitmap;
if( Bitmap.ReadInfo(argv[1]) )
Bitmap.WriteToTxt(argv[1]);
else
{
cout<<"读取文件出错"<<endl;
return 0;
}
return 1;
}

⑼ c/c++ cgi程序如何输出图片和其它二进制文件

cgi输出图片和其他二进制文件是需要区别对待的。主要差别在于设置好返回的response-head部分的mime-type。图片应该是image/jpeg,而二进制文件下载应该是application/octet-stream,当然还需要处理一下content-length这个头部。
至于说内容,不论用read还是fread源文件数据后,通过write或者fwrite到stdout(write用句柄1)就可以了