當前位置:首頁 » 編程語言 » c語言如何讀取圖片中的像素值
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言如何讀取圖片中的像素值

發布時間: 2022-08-20 03:35:38

㈠ C++中如何獲取圖片的像素值

用gdi+ 、OpenCV、cximge、freeimage等等庫 都有方法載入圖像,然後獲取對象的像素:
比如用gdi+:
1、#include "GdiPlus.h"
#pragma comment(lib, "gdiplus.lib")
2、初始化gdi+(具體可以網路下:)
3、Bitmap image(文件名);
int w = image.GetWidth();
int h = image.GetHeight()。

㈡ 如何在VC中讀取彩色BMP格式的圖像的像素值,急!麻煩各位高手幫幫忙啦!

,所以只做了處理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++)讀取點陣圖的像素點RGB信息

pData裡面保存的就是一個一個的COLORREF結構,你只需要通過BITMAPINFOHEADER中的寬高等信息,計算位移,就可以讀取某個點的RGB值了。
還有一個簡單的辦法,你之前已經有memBitmap這個CBitmap了,通過這個做更方便。通過SelectObject將memBitmap放到一個CDC中,直接使用函數GetPixel函數就可以獲取指定某個點的RGB值了,這個不需要計算和位移。

㈣ 如何用C語言程序從bmp格式的圖片中讀取圖片的灰度值

1、首先要了解bmp點陣圖的格式,搜索些技術支持文檔,bmp點陣圖基本上是分4大部分,文件信息結果部分,文件頭信息結果部分,調色板結果部分,後面就是數據實體部分。及其每個部分對應有用的信息。比如長寬。當然長寬信息你自己可以從window系統下看得到。打開bmp文件,把前面三部分的位元組總數給固定下來,逐個字元讀取,然後讀取數據實體部分,輸出就可以了。
2、常式:

#include<stdio.h>
#include<stdlib.h>
#pragmapack(2)
/*定義WORD為兩個位元組的類型*/
typedefunsignedshortWORD;
/*定義DWORD為e四個位元組的類型*/
typedefunsignedlongDWORD;
/*點陣圖文件頭*/
typedefstructBMP_FILE_HEADER
{
WORDbType;/*文件標識符*/
DWORDbSize;/*文件的大小*/
WORDbReserved1;/*保留值,必須設置為0*/
WORDbReserved2;/*保留值,必須設置為0*/
DWORDbOffset;/*文件頭的最後到圖像數據位開始的偏移量*/
}BMPFILEHEADER;
/*點陣圖信息頭*/
typedefstructBMP_INFO
{
DWORDbInfoSize;/*信息頭的大小*/
DWORDbWidth;/*圖像的寬度*/
DWORDbHeight;/*圖像的高度*/
WORDbPlanes;/*圖像的位面數*/
WORDbBitCount;/*每個像素的位數*/
DWORDbCompression;/*壓縮類型*/
DWORDbmpImageSize;/*圖像的大小,以位元組為單位*/
DWORDbXPelsPerMeter;/*水平解析度*/
DWORDbYPelsPerMeter;/*垂直解析度*/
DWORDbClrUsed;/*使用的色彩數*/
DWORDbClrImportant;/*重要的顏色數*/
}BMPINF;
/*彩色表*/
typedefstructRGB_QUAD
{
WORDrgbBlue;/*藍色強度*/
WORDrgbGreen;/*綠色強度*/
WORDrgbRed;/*紅色強度*/
WORDrgbReversed;/*保留值*/
}RGBQUAD;
intmain()
{
FILE*fp;
BMPFILEHEADERfileHeader;
BMPINFinfoHeader;
longoffset,bmpImageSize,width,height,bytesPerPixel,size,bitCount;
//inti,j;
//unsignedchar**p;
WORDc;
if((fp=fopen("5.bmp","rb"))==NULL)
{
printf("Cann'topenthefile! ");
exit(0);
}
fseek(fp,0,0);
fread(&fileHeader,sizeof(fileHeader),1,fp);
fread(&infoHeader,sizeof(infoHeader),1,fp);
//計算並輸出點陣圖數據的偏移量,圖像的大小,寬度和高度,每個像素點所佔的位元組
size=fileHeader.bSize;
offset=fileHeader.bOffset;
bmpImageSize=infoHeader.bmpImageSize;
width=infoHeader.bWidth;
height=infoHeader.bHeight;
bitCount=infoHeader.bBitCount;
bytesPerPixel=infoHeader.bBitCount/8;
printf("%d%d%d%d%d%d ",size,offset,bmpImageSize,width,height,bitCount,bytesPerPixel);
//輸出每個像素點所佔位元組中的內容
c=fgetc(fp);
while(!feof(fp))
{
printf("%x",c);
c=fgetc(fp);
}
printf(" ");
fclose(fp);
return0;
}

㈤ 如何用c語言printf輸出bmp圖片的像素信息。

#include<math.h>
#include<iomanip.h>
#include<stdlib.h>
#include<windows.h>
#include<stdio.h>
#include<stdlib.h>
#include<iostream.h>
#include<fstream.h>

//---------------------------------------------------------------------------------------
//以下該模塊是完成BMP圖像(彩色圖像是24bitRGB各8bit)的像素獲取,並存在文件名為xiang_su_.txt中
unsignedchar*pBmpBuf;//讀入圖像數據的指針

intbmpWidth;//圖像的寬
intbmpHeight;//圖像的高
RGBQUAD*pColorTable;//顏色表指針

intbiBitCount;//圖像類型,每像素位數

//-------------------------------------------------------------------------------------------
//讀圖像的點陣圖數據、寬、高、顏色表及每像素位數等數據進內存,存放在相應的全局變數中
boolreadBmp(char*bmpName)
{
FILE*fp=fopen(bmpName,"rb");//二進制讀方式打開指定的圖像文件

if(fp==0)
return0;

//跳過點陣圖文件頭結構BITMAPFILEHEADER

fseek(fp,sizeof(BITMAPFILEHEADER),0);

//定義點陣圖信息頭結構變數,讀取點陣圖信息頭進內存,存放在變數head中

BITMAPINFOHEADERhead;

fread(&head,sizeof(BITMAPINFOHEADER),1,fp);//獲取圖像寬、高、每像素所佔位數等信息

bmpWidth=head.biWidth;

bmpHeight=head.biHeight;

biBitCount=head.biBitCount;//定義變數,計算圖像每行像素所佔的位元組數(必須是4的倍數)

intlineByte=(bmpWidth*biBitCount/8+3)/4*4;//灰度圖像有顏色表,且顏色表表項為256

if(biBitCount==8)
{

//申請顏色表所需要的空間,讀顏色表進內存

pColorTable=newRGBQUAD[256];

fread(pColorTable,sizeof(RGBQUAD),256,fp);

}

//申請點陣圖數據所需要的空間,讀點陣圖數據進內存

pBmpBuf=newunsignedchar[lineByte*bmpHeight];

fread(pBmpBuf,1,lineByte*bmpHeight,fp);

fclose(fp);//關閉文件

return1;//讀取文件成功
}

//-----------------------------------------------------------------------------------------
//給定一個圖像點陣圖數據、寬、高、顏色表指針及每像素所佔的位數等信息,將其寫到指定文件中
boolsaveBmp(char*bmpName,unsignedchar*imgBuf,intwidth,intheight,intbiBitCount,RGBQUAD*pColorTable)
{

//如果點陣圖數據指針為0,則沒有數據傳入,函數返回

if(!imgBuf)
return0;

//顏色表大小,以位元組為單位,灰度圖像顏色表為1024位元組,彩色圖像顏色表大小為0

intcolorTablesize=0;

if(biBitCount==8)
colorTablesize=1024;

//待存儲圖像數據每行位元組數為4的倍數

intlineByte=(width*biBitCount/8+3)/4*4;

//以二進制寫的方式打開文件

FILE*fp=fopen(bmpName,"wb");

if(fp==0)
return0;

//申請點陣圖文件頭結構變數,填寫文件頭信息

BITMAPFILEHEADERfileHead;

fileHead.bfType=0x4D42;//bmp類型

//bfSize是圖像文件4個組成部分之和

fileHead.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+colorTablesize+lineByte*height;

fileHead.bfReserved1=0;

fileHead.bfReserved2=0;

//bfOffBits是圖像文件前3個部分所需空間之和

fileHead.bfOffBits=54+colorTablesize;

//寫文件頭進文件

fwrite(&fileHead,sizeof(BITMAPFILEHEADER),1,fp);

//申請點陣圖信息頭結構變數,填寫信息頭信息

BITMAPINFOHEADERhead;

head.biBitCount=biBitCount;

head.biClrImportant=0;

head.biClrUsed=0;

head.biCompression=0;

head.biHeight=height;

head.biPlanes=1;

head.biSize=40;

head.biSizeImage=lineByte*height;

head.biWidth=width;

head.biXPelsPerMeter=0;

head.biYPelsPerMeter=0;

//寫點陣圖信息頭進內存

fwrite(&head,sizeof(BITMAPINFOHEADER),1,fp);

//如果灰度圖像,有顏色表,寫入文件

if(biBitCount==8)
fwrite(pColorTable,sizeof(RGBQUAD),256,fp);

//寫點陣圖數據進文件

fwrite(imgBuf,height*lineByte,1,fp);

//關閉文件

fclose(fp);

return1;

}

//----------------------------------------------------------------------------------------
//以下為像素的讀取函數
voiddoIt()
{

//讀入指定BMP文件進內存

charreadPath[]="nv.BMP";

readBmp(readPath);

//輸出圖像的信息

cout<<"width="<<bmpWidth<<"height="<<bmpHeight<<"biBitCount="<<biBitCount<<endl;

//循環變數,圖像的坐標

//每行位元組數

intlineByte=(bmpWidth*biBitCount/8+3)/4*4;

//循環變數,針對彩色圖像,遍歷每像素的三個分量

intm=0,n=0,count_xiang_su=0;

//將圖像左下角1/4部分置成黑色

ofstreamoutfile("圖像像素.txt",ios::in|ios::trunc);

if(biBitCount==8)//對於灰度圖像
{
//------------------------------------------------------------------------------------
//以下完成圖像的分割成8*8小單元,並把像素值存儲到指定文本中。由於BMP圖像的像素數據是從
//左下角:由左往右,由上往下逐行掃描的
intL1=0;
inthang=63;
intlie=0;
//intL2=0;
//intfen_ge=8;
for(intfen_ge_hang=0;fen_ge_hang<8;fen_ge_hang++)//64*64矩陣行循環
{
for(intfen_ge_lie=0;fen_ge_lie<8;fen_ge_lie++)//64*64列矩陣循環
{
//--------------------------------------------
for(L1=hang;L1>hang-8;L1--)//8*8矩陣行
{
for(intL2=lie;L2<lie+8;L2++)//8*8矩陣列
{
m=*(pBmpBuf+L1*lineByte+L2);
outfile<<m<<"";
count_xiang_su++;
if(count_xiang_su%8==0)//每8*8矩陣讀入文本文件
{
outfile<<endl;
}
}
}
//---------------------------------------------
hang=63-fen_ge_hang*8;//64*64矩陣行變換
lie+=8;//64*64矩陣列變換
//該一行(64)由8個8*8矩陣的行組成
}
hang-=8;//64*64矩陣的列變換
lie=0;//64*64juzhen
}
}

//doublexiang_su[2048];
//ofstreamoutfile("xiang_su_.txt",ios::in|ios::trunc);
if(!outfile)
{
cout<<"openerror!"<<endl;
exit(1);
}
elseif(biBitCount==24)
{//彩色圖像
for(inti=0;i<bmpHeight;i++)
{
for(intj=0;j<bmpWidth;j++)
{
for(intk=0;k<3;k++)//每像素RGB三個分量分別置0才變成黑色
{
//*(pBmpBuf+i*lineByte+j*3+k)-=40;
m=*(pBmpBuf+i*lineByte+j*3+k);
outfile<<m<<"";
count_xiang_su++;
if(count_xiang_su%8==0)
{
outfile<<endl;
}
//n++;
}
n++;
}


}
cout<<"總的像素個素為:"<<n<<endl;
cout<<"----------------------------------------------------"<<endl;
}

//將圖像數據存檔

charwritePath[]="nvcpy.BMP";//圖片處理後再存儲

saveBmp(writePath,pBmpBuf,bmpWidth,bmpHeight,biBitCount,pColorTable);

//清除緩沖區,pBmpBuf和pColorTable是全局變數,在文件讀入時申請的空間

delete[]pBmpBuf;

if(biBitCount==8)
delete[]pColorTable;
}

voidmain()
{
doIt();
}

㈥ C#中如何得到圖片所有像素

步驟如下:
(1)在.NET中創建一個窗體,加入pictureBox控制項。設置其Image為空,SizeMode屬性設為AutoSize;
(2)加入一個OpenFileDialog控制項,一個button控制項,用於打開圖片文件;
(3)加入三個textBox控制項,用於表示RGB三個顏色的值。
(4)定義一個私有變數pick為布爾值,來表示是否拾取圖片上的顏色。並在Form1_Load中將其設置為false;再加入一個public Bitmap myBitmap用來進行函間的訪問
(5)為button控制項增加click事件,該事件主要是完成讀入文件和對pictureBox控制項的初始化:
(6)為pictureBox控制項增加mousemove事件:
代碼如下:
Step1:設置bool值pick並初始化幾個變數
public bool pick;
public Bitmap myBitmap;
private void Form1_Load(object sender, EventArgs e)
{
pick = false;
}

㈦ c語言數字圖像處理怎麼顯示一張照片的像素值

#include <stdio.h>
#include <windows.h>
int main()
{
//變數
char title[255];//用於存放控制台窗口標題
HWND hwnd;//窗口的句柄,H:Handle
HDC hdc, hmemdc;//設備上下文句柄,DC:driver context
HBITMAP hbm;//圖片的句柄
BITMAP bm;//圖片結構體
RECT rect;//矩形 rectangle
//把控制台窗口調成100字元寬度,40行
system("mode con cols=100 lines=40");

//1.取得窗口的句柄
GetConsoleTitleA(title, 255);//獲取控制台窗口的標題
hwnd = FindWindowA(NULL, title);//通過窗口標題取得該窗口的句柄
//獲取窗口的高度和寬度
GetWindowRect(hwnd, &rect);
//2. 獲取畫筆
hdc = GetDC(hwnd);
/* if(!hdc)
printf("No val\n");
else
printf("have\n");
TextOutA(hdc, 300, 400, "Hello world", strlen("Hello world"));*/
hmemdc = CreateCompatibleDC(hdc);//創建一個兼容的DC
//3.載入圖片
hbm = (HBITMAP)LoadImageA(NULL, "123.bmp", IMAGE_BITMAP, 0, 0,
LR_LOADFROMFILE);
GetObject(hbm, sizeof(BITMAP), &bm);//得到圖片信息
//4.把圖片放入兼容DC中
SelectObject(hmemdc, hbm);

//5.在窗口上畫出圖片
BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hmemdc, 0, 0, SRCCOPY);

DeleteObject(hbm);
DeleteObject(hmemdc);
ReleaseDC(hwnd, hdc);
return 0;
}

㈧ 用C語言讀取16位bmp圖片的每個像素的信息~

沒有什麼不同。
讀出 BITMAPINFO 結構:
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO;
以後,

BITMAPINFOHEADER 結構 里就有 biBitCount
biBitCount 等於 16 就是16位,等於24 就是24位,等於32 就是32位。

顏色在哪,要考慮 biCompression 壓縮方法,若等於 BI_RGB, bmiColors 就等於 NULL. 在 bitmap 數組里 每個WORD 就是 一個像素點. 5個 bits 蘭,5個 bits 綠,再5個 bits 紅,最高位不用。
其它方法自己看資料吧。

㈨ 怎樣用C語言得到jpeg格式或BMP格式的圖像的像素的rgb值

原型:
int WINAPI icePub_getImgfilePColor(char *strImgFilename,int x,int y,char *strR,char *strG,char *strB,int flag)
輸入:strImgFilename 待處理的圖片文件名
x x坐標
y y坐標
flag 輸出RGB值的格式,0 10進制,1 16進制
輸出:strR R值
strG G值
strB B值
返回碼:0 OK;-2 x,y值超出圖片長寬

int retCode=-1;
char strR[128],strG[128],strB[128];
Cstring m_mem;

typedef int (WINAPI ICEPUB_GETIMGFILEPCOLOR)(char *strImgFilename,int x,int y,char *strR,char *strG,char *strB,int flag);
ICEPUB_GETIMGFILEPCOLOR *icePub_getImgfilePColor = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)
icePub_getImgfilePColor = (ICEPUB_GETIMGFILEPCOLOR *)GetProcAddress(hDLLDrv, "icePub_getImgfilePColor");
if(icePub_getImgfilePColor)
retCode=icePub_getImgfilePColor("a.jpg",100,55,strR,strG,strB,0);
if(hDLLDrv)
FreeLibrary(hDLLDrv);
if(retCode == 0)
m_mem.Format("(x,y):%d,%d\r\nR:%s\r\nG:%s\r\nB:%s",point.x,point.y,strR,strG,strB);
AfxMessageBox(m_mem);

原型:
int WINAPI icePub_imgToFileTextdata(char *strImgFilename,char *strFilename,char *strFenge,int flag)
輸入:strImgFilename 待處理圖像文件 (會被強制256級灰度化)
strFilename 待生成BMP文本數據文件名
strFenge 列之間分隔符
flag 文本數據格式標志:0 10進制; 1 16進制; 10 RGB16進制
輸出:

extern "C"
{
__declspec(dllexport)
int WINAPI icePub_imgToFileTextdata(char *strImgFilename,char *strFilename,char *strFenge,int flag);
}

#pragma comment(lib,"icePubDll.lib")

icePub_imgToFileTextdata("a.jpg","bmpdata.txt",",",0);

原型:
char * WINAPI icePub_getBufferFromImg2(char *strImgFilename,int *width,int *height,int huiGrade)
輸入:strImgFilename 圖片文件名
huiGrade 圖像灰度化標志,0 no; >1 and <=256 灰度級
輸出:width 圖像寬度
height 圖像高度
返回值:圖像的點陣數據(按照24位BMP格式)

extern "C"
{
__declspec(dllexport)
char * WINAPI icePub_getBufferFromImg2(char *strImgFilename,int *width,int *height,int huiGrade);
}

#pragma comment(lib,"icePubDll.lib")

char *bmpBuffer=NULL;
int imgWidth, imgHeight;

bmpBuffer = icePub_getBufferFromImg2 ("e:\\a.jpg",&imgWidth,&imgHeight,0);
//然後對bmpBuffer數據處理即可

if(bmpBuffer != NULL)
free(bmpBuffer);