'创建页面事件
PrivateSubPage_Load(ByValsenderAsSystemObject,_
ByValeAsSystemEventArgs)HandlesMyBaseLoad
'声明整型变量i,
DimiAsInteger
'创建一个位图对象,用来放置柱形图,我们可以把它看作是一块画布。
'这里宽、高分别是400和200,当然,你也可以根据需要把它们做为参数来进行传递。
DimobjBitMapAsNewBitmap(400,200)
'声明一个图形对象,在上面创建的位图上画图。
DimobjGraphicsAsGraphics
'从指定的objBitMap对象创建新图形对象objGraphics。
objGraphics=GraphicsFromImage(objBitMap)
'清除整个绘图面并以指定白色为背景色进行填充。
objGraphicsClear(ColorWhite)
'创建一个数据源,这里我们为了方便其间,采用数组做为柱形图和饼图的数据源。
DimarrValues(6)AsInteger
arrValues(0)=100
arrValues(1)=135
arrValues(2)=115
arrValues(3)=125
arrValues(4)=75
arrValues(5)=120
arrValues(6)=40
这里介绍两种种方法。
1,SqlDataReader的GetSqlBytes方法用于检索varbinary(max)列的内容。
reader = commandExecuteReader(CommandBehaviorSequentialAccess);
while (readerRead())
SqlBytes bytes = readerGetSqlBytes(0);
例1从NorthWind数据库的Employees表读取雇员图像并显示。SqlDataReader的GetSqlBytes方法返回一个SqlBytes对象,该对象公开Stream属性。使用该属性创建新的Bitmap对象,然后以Gif ImageFormat格式保存到Stream。
private void ReadPhoto(string lastName) //读取雇员图像并显示
{
using (SqlConnection connection = new SqlConnection(ConnectionString))
{
Stream s = new MemoryStream(); //创建一个以内存为后备存储的流
SqlCommand command = connectionCreateCommand();
SqlDataReader reader = null;
try
{
commandCommandText = "SELECT LastName,Photo FROM dboEmployees " +
" WHERE LastName=@LastName";
commandCommandType = CommandTypeText;
//声明参数并赋值
SqlParameter parameter = new SqlParameter("@LastName", SqlDbTypeNVarChar, 20);
parameterValue = lastName;
commandParametersAdd(parameter);
connectionOpen();
//修改DataReader的默认行为,SequentialAccess按顺序接收数据并立即加载
//CloseConnection指明关闭DataReader时,对数据库的连接也关闭
reader = commandExecuteReader(
CommandBehaviorSequentialAccess|CommandBehaviorCloseConnection);
if (readerHasRows)
{
while (readerRead())
{
//SequentialAccess要求按顺序接收数据,先接受reader[0]
thislabel1Text = reader[0]ToString();
if (readerIsDBNull(1)) //若列值为空返回
return;
else
{
//使用readerGetSqlBytes获取图像数据
SqlBytes bytes = readerGetSqlBytes(1);
using (Bitmap productImage = new Bitmap(bytesStream))
{
//以gif格式保存在Stream流并显示
productImageSave(s, SystemDrawingImagingImageFormatGif);
thispictureBox1Image = SystemDrawingImageFromStream(s);
} } }
}
else
MessageBoxShow("No records returned");
}
catch (Exception ex)
{
MessageBoxShow(exMessage);
}
Finally
{
if (reader != null)
readerDispose(); //关闭DataReader,同时关闭对数据库连接
}
sClose(); //关闭流
}
}
本程序将DataReader设置为SequentialAccess,要求顺序访问字段,所以先读取LastName小数据,再读取图像大数据。程序运行后从组合框选取雇员的LastName,将在图形框出现雇员的图像,
2,SqlDataReader的GetSqlBinary方法可用于检索varbinary(max)列的内容。
reader = commandExecuteReader(CommandBehaviorCloseConnection);
while (readerRead())
SqlBinary binaryStream = readerGetSqlBinary(0);
例2 AdventureWorks2008数据库中的ProductionProductPhoto表含有图形列LargePhoto,数据类型是varbinary(max),可空。用GetSqlBinary方法检索图形数据的代码如下:
private void ReadPhoto(int documentID) //输入参数documentID是产品ID
{
using (SqlConnection connection = new SqlConnection(GetConnectionString()))
{
thislabel1Text = documentIDToString();
try
{
string queryString = "SELECT LargePhoto FROM ProductionProductPhoto " +
"WHERE ProductPhotoID=@ProductPhotoID";
SqlCommand command = new SqlCommand(queryString, connection);
SqlParameter paramID = new SqlParameter("@ProductPhotoID", SqlDbTypeInt);
paramIDValue = documentID;
commandParametersAdd(paramID);
connectionOpen();
//修改DataReader的默认行为
SqlDataReader reader = commandExecuteReader(
CommandBehaviorSequentialAccess|CommandBehaviorCloseConnection);
if (readerHasRows)
{
while (readerRead())
{
if (readerIsDBNull(0))
return;
else
{
Stream s = new MemoryStream();
SqlBinary binaryStream = readerGetSqlBinary(0);
//根据SqlBinary值初始化SqlBytes类的新实例
SqlBytes bytes = new SqlBytes(binaryStream);
using (Bitmap productImage = new Bitmap(bytesStream))
{
//用gif格式保存图形
productImageSave(s, SystemDrawingImagingImageFormatGif);
thispictureBox1Image = SystemDrawingImageFromStream(s);
}
sClose();
} }
}
else
MessageBoxShow("No records returned");
}
catch (Exception ex)
{
MessageBoxShow(exMessage);
} }
}
下图为documentID=100的自行车类型
以上示例取自C#编程指南但尧编著清华大学出版社2011年1月
用AndroidSDK中的Face Detector实现人脸识别
流程是这样的:
1 读取一张至Bitmap (从Resource中,或是从手机相册中选取)
2 使用FaceDetector API分析Bitmap,将探测到的人脸数据以FaceDetectorFace存储在一个Face list中;
3将人脸框显示在上。
SystemDataOleDbOleDbDataReaderGetBytes 方法获取 byte[] 二进制数据。
SystemIOFileStreamWrite 方法写入 byte[] 二进制数据。
请参见 MSDN 的详细参数说明,我不粘贴 MSDN 了。
注意:
FileData 表里的 image 字段里面存放的文件特别大(如:几百兆大小),建议不要 GetBytes 方法一次性读取到内存中,这样不仅很耗内存,并且速度也特别慢。
合理的方法:
设立一个循环,分段读取(如:一次读取 1MB)二进制数据,再调用 Write 把刚才读取的数据写入文件,循环到直至数据全部读取完毕。
PS:
通过 GetBytes 的返回值可以判断数据是否读取完毕(判断是否为零)。该方法的返回值表示读取到的字节数。
提示:
假设您一次读取 1000 字节的数据,而数据字段已没有 1000 字节的数据则 GetBytes 返回值 < 1000 否则 GetBytes 返回值 == 1000
是二进制字段数据(文件)
20数据库存入二进制字段数据
/
using SystemData;
using SystemIO;
using SystemDataSqlClient;
/
private string File="";
if(openFileDialog1ShowDialog()==DialogResultOK)
{
pictureBox1Image=new Bitmap(openFileDialog1FileName);
FileName=openFileDialog1FileName;
}
try{
DataSet ds=new DataSet();
sqlDataAdapter1Fill(ds,%%1); //"db"
DataTable MyTable=dsTables[0];
DataRow MyRow=MyTableRowsCount+1;
MyRow[%%2]=MyTableNewRow(); //"id"
MyRow[%%3]=%%5; //"FileName"
MyRow[%%4]=%%6; //"Description"
FileStream fs=new FileStream(FileNmae,FileModeOpenOrCreate,FileAccessRead);
byte[] MyData=new byte[fsLength];
fsRead(MyData,0,(int)fsLength);
MyRow[%%7[=MyData; //"FileData"
MyTableRowsAdd(MyRow);
sqlDataAdapter1Update(ds,%%1);
dsAcceptChanges();
//存储成功
}
catch(Exception ex)
{
//exMessageToString()
}
21数据库取出二进制字段数据
/
using SystemData;
using SystemIO;
/
private int index=1;
private SystemWindowsFormsBindingManagerBase_Bind();
private DataSet ds=new DataSet();
sqlDataAdapter1Fill(ds,%%1); //"db"
_Bind=BindingContext[ds,%%1];
textBox1DataBindingsAdd("Text",ds,"%%1%%3"); //filename
textBox2DataBindingsAdd("Text",ds,"%%1%%4"); //description
if(_BindCount!=0)
{
try{
if(pictureBox1Image!=null)
pictureBox1ImageDispose();
pictureBox1Image=null;
sqlDataAdapter1SelectCommandCommandText="Select From %%1 Where %%2="+ConvertToString(index); //id
DataSet dataSet=new DataSet();
sqlDataAdapter1Fill(dataSet,%%1);
byte[] MyData=(byte[])dataSetTables[0]Rows[0][%%5]; //"FileData"
Int32 size=MyDataGetUpperBound(0);
FileStream fs=new FileStream(%%6,FileModeOpenOrCreate,FileAccessWrtie); //"tempbmp"
fsWrite(MyData,0,size+1);
fsClose();
pictureBox1Image=new Bitmap(%%6);
}
catch(Exception ex)
{
//exMessageToString()
}
}
22批量执行SQL和存储过程
/// <summary>
/// 储存过程->删除;
/// </summary>
/// <param name="id"> </param>
/// <returns> </returns>
public DataTable GetTable(int id)
{
DataTable dt = new DataTable();
SqlConnection con = new SqlConnection("server=;database=master;User id=sa;pwd=sa");
SqlCommand com = new SqlCommand("proc_Shoping", con); //连接数据库执行存储过程
comCommandType = CommandTypeStoredProcedure;
//执行存储过程
SqlDataAdapter da = new SqlDataAdapter(com);
SqlParameter param; //添加一个输入参数
param = new SqlParameter("@id", SqlDbTypeInt); //设置类型为输入类型 ,并传入参数;
paramDirection = ParameterDirectionInput;
param Value= id; //当前参数的值
paramValue =10;
comParametersAdd(param); //将设置好的sqlparameter对象添加到da中
daFill(dt);
return dt; //返回Datatable
}
实现的功能为从服务器获取数据,在布局页面上显示。由于的个数是不确定的,因此采用在布局页面中定义多个ImageView来显示是不合理的。
(一)首先定义布局
android:id="@+id/id_layout_movie"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
(二)加载显示时获取到布局文件
RelativeLayout rl_Movie = (RelativeLayout) findViewById(Ridid_layout_movie);
(三)依次循环服务器获取的数据,一张一张设置显示的位置
//newWidth为显示的宽度,newHeight为显示的高度
RelativeLayoutLayoutParams lp1 = new RelativeLayoutLayoutParams( newWidth, newHeight);
设置lp1leftMargin和lp1topMargin的值
(四)最后设置rl_MovieaddView(iv, lp1)将加入布局文件中
感觉这样应该可以,
先从数据库里面获得
这个的绝对路径
然后
使用UIL类
URL
url=new
URL(file:///路径);
然后得到这个文件的输入流InputStream
in=urlopenStream();
然后得到此的位图Bitmap
bitmap=BitmapFactorydecodeStream(in);
ImageView
img=new
ImageView(this);
imgsetImageBitmap(bitmap);
从网络上的话是这样,但是手机上是不是这样就不清楚了你可以试一下。
那个应该是要放在手机上。
以上就是关于数据库数据生成图形全部的内容,包括:数据库数据生成图形、C#读出SQL数据库中存储的图片到picturebox、android中人脸识别扫描人然后怎样将图像保存到本地数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)