using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OTSCommon
{
public class MergedparticlesHelper
{
private SqLiteHelper dbHelper;
public MergedparticlesHelper(string path)
{
dbHelper = new SqLiteHelper("data source = '"+path+"'");
}
///
/// 获取ParticleList
///
/// Feature
///
public DataTable GetMergedParticles()
{
string sqlp = @"select *,
(select group_concat(name||'-'||Percentage,';')
from ElementChemistry where XRayId =MergedParticles.XRayId and fieldid=MergedParticles.fieldid ) as Element
from MergedParticles ";
DataTable DT = dbHelper.ExecuteQuery(sqlp);
// List listp = dbHelper.TableToList(DT);
return DT;
}
///
/// 获取所有Particle
///
///
public DataTable GetParticleAll(string fieldAndPartic)
{
string sqlp = @"select * from INcAData";
if (fieldAndPartic != "")
{
sqlp = sqlp + " where '" + fieldAndPartic + "' like ('%,'||fieldid||'-'||particleid||',%')";
}
DataTable DT = dbHelper.ExecuteQuery(sqlp);
return DT;
}
///
/// 通过FileStream 来打开文件,这样就可以实现不锁定Image文件,到时可以让多用户同时访问Image文件
///
///
///
public Bitmap ReadImageFile(string path)
{
if (!File.Exists(path))
{
return null;//文件不存在
}
FileStream fs = File.OpenRead(path); //OpenRead
int filelength = 0;
filelength = (int)fs.Length; //获得文件长度
Byte[] image = new Byte[filelength]; //建立一个字节数组
fs.Read(image, 0, filelength); //按字节流读取
System.Drawing.Image result = System.Drawing.Image.FromStream(fs);
fs.Close();
Bitmap bit = new Bitmap(result);
return bit;
}
public Bitmap GetBitmapForBig(string sub, double xs, string path)
{
string vs = "," + sub.Replace(':', '-') + ",";
DataTable dataTable = GetParticleAll(vs);
if (dataTable.Rows.Count == 0)
{
return null;
}
//内接矩形
double max_Y = Convert.ToInt64(dataTable.Rows[0]["FieldPosY"]) * xs - Convert.ToInt64(dataTable.Rows[0]["RectTop"]);
double max_X = Convert.ToInt64(dataTable.Rows[0]["FieldPosX"]) * xs + Convert.ToInt64(dataTable.Rows[0]["RectLeft"]);
double min_Y = max_Y;
double min_X = max_X;
//拼接field矩形
double MAX_Y = Convert.ToInt64(dataTable.Rows[0]["FieldPosY"]) * xs;
double MAX_X = Convert.ToInt64(dataTable.Rows[0]["FieldPosX"]) * xs;
double MIN_Y = MAX_Y;
double MIN_X = MAX_X;
foreach (DataRow item in dataTable.Rows)
{
//颗粒外接矩形
double lefttopX = Convert.ToInt64(item["FieldPosX"]) * xs + Convert.ToInt64(item["RectLeft"]);
if (lefttopX < min_X)
{
min_X = lefttopX;
}
if (lefttopX + Convert.ToInt64(item["RectWidth"]) > max_X)
{
max_X = lefttopX + Convert.ToInt64(item["RectWidth"]);
}
double lrfttopY = Convert.ToInt64(item["FieldPosY"]) * xs - Convert.ToInt64(item["RectTop"]);
if (max_Y < lrfttopY)
{
max_Y = lrfttopY;
}
if (min_Y > lrfttopY - Convert.ToInt64(item["RectHeight"]))
{
min_Y = lrfttopY - Convert.ToInt64(item["RectHeight"]);
}
//画布
double lefttopXH = Convert.ToInt64(item["FieldPosX"]) * xs;
if (lefttopXH > MAX_X)
{
MAX_X = lefttopXH;
}
if (lefttopXH < MIN_X)
{
MIN_X = lefttopXH;
}
double lrfttopYH = Convert.ToInt64(item["FieldPosY"]) * xs;
if (MAX_Y < lrfttopYH)
{
MAX_Y = lrfttopYH;
}
if (MIN_Y > lrfttopYH)
{
MIN_Y = lrfttopYH;
}
}
int WIDTH = Convert.ToInt32(MAX_X - MIN_X) + 1024;
int HEIGHT = Convert.ToInt32(MAX_Y - MIN_Y) + 768;
//构造最终的图片白板
Bitmap tableChartImage = new Bitmap(WIDTH, HEIGHT);
Graphics graph = Graphics.FromImage(tableChartImage);
//初始化这个大图
graph.DrawImage(tableChartImage, 0, 0);
int width = Convert.ToInt32(max_X - min_X);
int height = Convert.ToInt32(max_Y - min_Y);
int X = Convert.ToInt32(min_X - MIN_X);
int Y = Convert.ToInt32(MAX_Y - max_Y);
Rectangle rectangle = new Rectangle() { X = X, Y = Y, Width = width, Height = height };
foreach (DataRow item in dataTable.Rows)
{
string filePath = path + "\\FIELD_FILES\\";
string imagePath = filePath + "Field" + item["fieldid"].ToString() + ".bmp";
//然后将取出的数据,转换成Bitmap对象
Bitmap ls_bt = ReadImageFile(imagePath);
int x = Convert.ToInt32(Convert.ToDouble(item["FieldPosX"]) * xs - MIN_X);
int y = Convert.ToInt32(Convert.ToDouble(item["FieldPosY"]) * xs - MIN_Y);
try
{
graph.DrawImage(ls_bt, x, y);
}
catch /*(Exception e)*/
{
throw;
}
}
Bitmap bmap = tableChartImage.Clone(rectangle, PixelFormat.Format8bppIndexed);
// bmap.Save(path + "asd.bmp");
return bmap;
}
}
}