當前位置:首頁 » 圖片資訊 » 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)就可以了