543 lines
23 KiB
C#
543 lines
23 KiB
C#
using AllBase;
|
||
using AllBase.Model.Result;
|
||
using AllBase.Model.Result.TemuResult;
|
||
using CefSharp;
|
||
using CefSharp.WinForms;
|
||
using NaiBa.Util.Extension;
|
||
using Newtonsoft.Json.Linq;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.ComponentModel;
|
||
using System.Data;
|
||
using System.Drawing;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading;
|
||
using System.Threading.Tasks;
|
||
using System.Windows.Forms;
|
||
using TemuKJD.BaseForms;
|
||
using TemuKJD.Helper;
|
||
using TemuKJD.KJDForms.ProductSelectForms;
|
||
using Work;
|
||
using Work.BLL.Tools;
|
||
|
||
namespace TemuKJD.ToolForms
|
||
{
|
||
public partial class DouBaoImgCefForm : LRBaseForm
|
||
{
|
||
ChromiumWebBrowser cefWebBrowser = null;
|
||
KJDDBProduct dbProd = null;
|
||
|
||
string Url { get; set; } = "https://www.doubao.com/chat/";
|
||
List<Cookie> Cookies = new List<Cookie>();
|
||
public DouBaoImgCefForm(KJDDBProduct _dbProd, string url = "", List<Cookie> cookies = null)
|
||
{
|
||
InitializeComponent();
|
||
|
||
if (_dbProd != null)
|
||
dbProd = _dbProd;
|
||
if (!string.IsNullOrEmpty(url))
|
||
Url = url;
|
||
if (cookies != null)
|
||
Cookies = cookies;
|
||
|
||
this.Width = Math.Min(1600, Screen.PrimaryScreen.Bounds.Width);
|
||
this.Height = Math.Min(900, Screen.PrimaryScreen.Bounds.Height);
|
||
this.StartPosition = FormStartPosition.CenterScreen;
|
||
|
||
|
||
}
|
||
|
||
private void DouBaoCefForm_Load(object sender, EventArgs e)
|
||
{
|
||
cefWebBrowser = NaiBa.CefHelper.CEFBrowser.CreateChromiumWebBrowser(Url);
|
||
cefWebBrowser.AutoSize = true;
|
||
cefWebBrowser.Dock = DockStyle.Fill;
|
||
//cefWebBrowser.RequestContext = new RequestContext(requestContextSettings);
|
||
cefWebBrowser.KeyboardHandler = new KJDForms.ToolForms.CefKeyboardHandler();
|
||
cefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd;
|
||
cefWebBrowser.AddressChanged += CefWebBrowser_AddressChanged;
|
||
CustomDownloadHandler downloadHandler = new CustomDownloadHandler();
|
||
downloadHandler.DownloadCompleteEvent += DownloadHandler_DownloadComplete;
|
||
cefWebBrowser.DownloadHandler = downloadHandler;
|
||
panel2.Controls.Add(cefWebBrowser);
|
||
|
||
this.splitContainer3.Panel2.Controls.Clear();
|
||
if (BaseClass.MainPath=="kuajingda")
|
||
{
|
||
try
|
||
{
|
||
var temuDBProd = DbProductSelectListManageForm.GetProductDetail(dbProd.id.ToString());
|
||
if (temuDBProd == null || temuDBProd.id == 0)
|
||
{
|
||
BaseMsgForm.ShowError("商品已清除!");
|
||
return;
|
||
}
|
||
dbProd = temuDBProd;
|
||
|
||
var prodInfo = JsonHelper.DeserializeJsonToObject<TemuDetailProductInfo>(dbProd.product_json);
|
||
var ucImgChangeList = new List<UcSkuImgItem>();
|
||
this.TitleText = "豆包生成SKU图 主店ID:" + prodInfo.supplierId.ParseToString() + " SKC:" + prodInfo.productSkcList.FirstOrDefault()?.productSkcId +
|
||
" SPU:" + prodInfo.productId + " 名称:" + prodInfo.productName;
|
||
this.txtShopId.Text = "主店ID:" + prodInfo.supplierId.ParseToString();
|
||
this.txtSpuId.Text = "SPU:" + prodInfo.productId.ParseToString();
|
||
this.txtSkcId.Text = "SKC:" + prodInfo.productSkcList.FirstOrDefault()?.productSkcId.ParseToString();
|
||
foreach (var sku in prodInfo.productSkcList[0].productSkuList)
|
||
{
|
||
var imgUrl = sku.thumbUrl.Replace("https://", "http://");
|
||
if (!ucImgChangeList.Any(p=>p.pbSkuOriginalImg.ImageLocation == imgUrl))
|
||
{
|
||
UcSkuImgItem skuImgItem = new UcSkuImgItem(prodInfo.productId.ParseToLong(), sku.productSkuSpecList[0].specId.ParseToLong(),
|
||
sku.productSkuSpecList[0].specName, imgUrl);
|
||
skuImgItem.pbSkuOriginalImg.ImageLocation = imgUrl;
|
||
skuImgItem.pbSkuOriginalImg.Tag = "{\"productId\":" + prodInfo.productId +
|
||
",\"skuId\":" + sku.productSkuId +
|
||
",\"specId\":" + sku.productSkuSpecList[0].specId +
|
||
",\"specName\":\"" + sku.productSkuSpecList[0].specName + "\"}";
|
||
skuImgItem.pbSkuOriginalImg.Name = sku.productSkuId.ToString();
|
||
skuImgItem.chkSpecName.Text = sku.productSkuSpecList[0].specName + " " + sku.productSkuSpecList[0].specId;
|
||
skuImgItem.chkSpecName.Tag = skuImgItem;
|
||
skuImgItem.chkSpecName.CheckedChanged += ChkSpecName_CheckedChanged;
|
||
skuImgItem.btnGetOriginalImg.Tag = skuImgItem;
|
||
skuImgItem.btnGetOriginalImg.Click += btnGetOriginalImg_Click;
|
||
skuImgItem.btnUploadImg.Tag = skuImgItem;
|
||
skuImgItem.btnUploadImg.Click += btnUploadImg_Click;
|
||
skuImgItem.pbSkuOriginalImg.Tag = skuImgItem;
|
||
skuImgItem.pbSkuOriginalImg.Click += pbSkuOriginalImg_Click;
|
||
skuImgItem.pbSkuImg.Tag = skuImgItem;
|
||
skuImgItem.pbSkuImg.Click += PbSkuImg_Click;
|
||
skuImgItem.Dock = DockStyle.Top;
|
||
ucImgChangeList.Add(skuImgItem);
|
||
this.splitContainer3.Panel2.Controls.Add(skuImgItem);
|
||
}
|
||
}
|
||
|
||
pbLoading.Visible = true;
|
||
pbLoading.BringToFront();
|
||
pbLoading2.Visible = true;
|
||
pbLoading2.BringToFront();
|
||
Task.Run(() =>
|
||
{
|
||
foreach (Control c in this.splitContainer3.Panel2.Controls)
|
||
{
|
||
var skuImgItem = c as UcSkuImgItem;
|
||
if (skuImgItem == null)
|
||
continue;
|
||
|
||
List<AiSkuImgInfo> skuImgLst = new List<AiSkuImgInfo>();
|
||
int page = 1;
|
||
int pageSize = 5;
|
||
var skuImgLstTmp = GetSkuImgList(skuImgItem.ProdId.ParseToString(), skuImgItem.SpecId.ParseToString(), pageSize, false, page);
|
||
skuImgLst.AddRange(skuImgLstTmp);
|
||
while (skuImgLstTmp.Count >= pageSize)
|
||
{
|
||
page++;
|
||
skuImgLstTmp = GetSkuImgList(skuImgItem.ProdId.ParseToString(), skuImgItem.SpecId.ParseToString(), pageSize, false, page);
|
||
skuImgLst.AddRange(skuImgLstTmp);
|
||
}
|
||
|
||
skuImgItem.LstSkuImgInfo = skuImgLst;
|
||
if (skuImgLst.Count > 0)
|
||
{
|
||
var skuImgInfo = skuImgLst.First();
|
||
|
||
Invoke(new Action(() =>
|
||
{
|
||
//if (!string.IsNullOrWhiteSpace(skuImgInfo.img_url))
|
||
// skuImgItem.pbSkuImg.ImageLocation = skuImgInfo.img_url.Replace("img.kwcdn.com", "img.cdnfe.com").Replace("https://", "http://");
|
||
//else
|
||
if (!string.IsNullOrWhiteSpace(skuImgInfo.img_base64))
|
||
skuImgItem.pbSkuImg.Image = Base64ChangeImgUrl.Base64ToImage(skuImgInfo.img_base64);
|
||
}));
|
||
}
|
||
}
|
||
Invoke(new Action(() =>
|
||
{
|
||
pbLoading.Visible = false;
|
||
pbLoading2.Visible = false;
|
||
}));
|
||
});
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
BaseMsgForm.ShowError(ex.Message);
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
|
||
private void ChkSpecName_CheckedChanged(object sender, EventArgs e)
|
||
{
|
||
var chk = sender as UserComponent.UcCheckBox;
|
||
if (chk == null)
|
||
return;
|
||
var skuImgItem = chk.Tag as UcSkuImgItem;
|
||
if (skuImgItem == null)
|
||
return;
|
||
|
||
if (skuImgItem.chkSpecName.Checked)
|
||
SetCurrentSkuImgItem(skuImgItem);
|
||
}
|
||
|
||
private void DownloadHandler_DownloadComplete(object browser, DownloadItem downloadItem)
|
||
{
|
||
//BaseMsgForm.ShowInfo(downloadItem.FullPath + "下载完成");
|
||
Invoke(new Action(() =>
|
||
{
|
||
if(currentSkuImgItem == null)
|
||
{
|
||
BaseMsgForm.ShowInfo("当前未选择sku,点击选择sku再下载,图片将直接上传到服务端!");
|
||
this.lblMsg.Text = downloadItem.FullPath + "下载完成";
|
||
}
|
||
else
|
||
{
|
||
if (UpdateSkuImg(currentSkuImgItem, downloadItem.FullPath))
|
||
{
|
||
this.lblMsg.Text = downloadItem.FullPath + "下载并上传服务端完成";
|
||
}
|
||
else
|
||
{
|
||
this.lblMsg.Text = downloadItem.FullPath + "下载完成";
|
||
}
|
||
}
|
||
this.pnlMsg.Visible = true;
|
||
}));
|
||
Task.Run(() =>
|
||
{
|
||
Thread.Sleep(2000);
|
||
Invoke(new Action(() =>
|
||
{
|
||
this.pnlMsg.Visible = false;
|
||
}));
|
||
});
|
||
}
|
||
|
||
|
||
public static List<AiSkuImgInfo> GetSkuImgList(string prodId, string specId, int pageSize = 50, bool isRandom = false, int page = 1)
|
||
{
|
||
var url = BaseClass.BuildObjString("product/get_sku_image_list");
|
||
var data = UserLogin.GetSignaturex();
|
||
data += "&search_product_id=" + prodId;
|
||
data += "&search_spec_id=" + specId;
|
||
data += "&page_size=" + pageSize;
|
||
data += "&page=" + page;
|
||
if (isRandom)
|
||
{
|
||
data += "&is_random=true";
|
||
}
|
||
|
||
var html = GetHtml.PostUtf8(url, data);
|
||
if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200"))
|
||
html = GetHtml.PostUtf8(url, data);
|
||
if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200"))
|
||
html = GetHtml.PostUtf8(url, data);
|
||
if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200"))
|
||
{
|
||
BaseMsgForm.ShowError("SKU图片查询失败,请重试!" + BaseRegex.GetStringJson(ref html, "msg"));
|
||
return new List<AiSkuImgInfo>();
|
||
}
|
||
else
|
||
{
|
||
try
|
||
{
|
||
JObject jObj = JObject.Parse(html);
|
||
return JsonHelper.DeserializeJsonToList<AiSkuImgInfo>(jObj["data"].ToString());
|
||
}
|
||
catch(Exception ex)
|
||
{
|
||
BaseMsgForm.ShowError("SKU图片查询失败,请重试!" + ex.Message);
|
||
return new List<AiSkuImgInfo>();
|
||
}
|
||
}
|
||
}
|
||
|
||
private void pbSkuOriginalImg_Click(object sender, EventArgs e)
|
||
{
|
||
var pb = sender as PictureBox;
|
||
if (pb == null)
|
||
return;
|
||
|
||
if (!string.IsNullOrEmpty(pb.ImageLocation))
|
||
{
|
||
ShowImgForm imgFrom = new ShowImgForm(pb.ImageLocation);
|
||
imgFrom.ShowDialog();
|
||
}
|
||
else
|
||
{
|
||
ShowImgForm imgFrom = new ShowImgForm(pb.Image);
|
||
imgFrom.ShowDialog();
|
||
}
|
||
|
||
var skuImgItem = pb.Tag as UcSkuImgItem;
|
||
if (skuImgItem == null)
|
||
return;
|
||
|
||
//SetCurrentSkuImgItem(skuImgItem);
|
||
}
|
||
|
||
private void PbSkuImg_Click(object sender, EventArgs e)
|
||
{
|
||
var pb = sender as PictureBox;
|
||
if (pb == null)
|
||
return;
|
||
var skuImgItem = pb.Tag as UcSkuImgItem;
|
||
if (skuImgItem == null)
|
||
return;
|
||
|
||
//SetCurrentSkuImgItem(skuImgItem);
|
||
|
||
DouBaoImgListForm imgLstForm = new DouBaoImgListForm(skuImgItem.LstSkuImgInfo);
|
||
imgLstForm.ShowDialog();
|
||
var imgInfo = skuImgItem.LstSkuImgInfo.FirstOrDefault();
|
||
if (imgInfo == null)
|
||
{
|
||
skuImgItem.pbSkuImg.Image = Properties.Resources.nopic;
|
||
}
|
||
else
|
||
{
|
||
if (!string.IsNullOrWhiteSpace(imgInfo.img_url))
|
||
skuImgItem.pbSkuImg.ImageLocation = imgInfo.img_url;
|
||
else if (!string.IsNullOrWhiteSpace(imgInfo.img_base64))
|
||
skuImgItem.pbSkuImg.Image = Base64ChangeImgUrl.Base64ToImage(imgInfo.img_base64);
|
||
}
|
||
}
|
||
|
||
private void btnGetOriginalImg_Click(object sender, EventArgs e)
|
||
{
|
||
var pnl = sender as DevComponents.DotNetBar.PanelEx;
|
||
if (pnl == null)
|
||
return;
|
||
var skuImgItem = pnl.Tag as UcSkuImgItem;
|
||
if (skuImgItem == null)
|
||
return;
|
||
|
||
SetCurrentSkuImgItem(skuImgItem);
|
||
|
||
var pb = skuImgItem.pbSkuOriginalImg;
|
||
if (pb.Image == null)
|
||
{
|
||
BaseMsgForm.ShowError("图片为空!");
|
||
return;
|
||
}
|
||
|
||
string fileName = DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss") + ".jpg";
|
||
if (!string.IsNullOrEmpty(pb.ImageLocation))
|
||
{
|
||
fileName = pb.ImageLocation.Replace("://", ".").Replace('/', '.');
|
||
}
|
||
SaveFileDialog sfd = new SaveFileDialog();
|
||
sfd.Filter = "JPeg Image|*.jpg;*.jpeg";
|
||
sfd.Title = "保存图片";
|
||
sfd.FileName = fileName;
|
||
if (sfd.ShowDialog() == DialogResult.OK)
|
||
{
|
||
pb.Image.Save(sfd.FileName, System.Drawing.Imaging.ImageFormat.Jpeg);
|
||
}
|
||
}
|
||
|
||
private void btnUploadImg_Click(object sender, EventArgs e)
|
||
{
|
||
var pnl = sender as DevComponents.DotNetBar.PanelEx;
|
||
if (pnl == null)
|
||
return;
|
||
var skuImgItem = pnl.Tag as UcSkuImgItem;
|
||
if (skuImgItem == null)
|
||
return;
|
||
|
||
SetCurrentSkuImgItem(skuImgItem);
|
||
|
||
OpenFileDialog openFileDialog = new OpenFileDialog();
|
||
openFileDialog.Multiselect = false;
|
||
// 设置过滤条件,只显示文本文件
|
||
openFileDialog.Filter = "图片文件 (*.jpeg;*.jpg;*.png)|*.jpeg;*.jpg;*.png|All files (*.*)|*.*";
|
||
// 显示对话框并获取结果
|
||
if (openFileDialog.ShowDialog() == DialogResult.OK)
|
||
{
|
||
string filePath = openFileDialog.FileName;
|
||
UpdateSkuImg(skuImgItem, filePath);
|
||
}
|
||
}
|
||
|
||
bool UpdateSkuImg(UcSkuImgItem skuImgItem, string filePath)
|
||
{
|
||
try
|
||
{
|
||
Image image = Image.FromFile(filePath);
|
||
ImageBuild ib = null;
|
||
using (MemoryStream memoryStream = new MemoryStream())
|
||
{
|
||
image.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Jpeg);
|
||
byte[] imageBytes = memoryStream.ToArray();
|
||
ib = new ImageBuild(imageBytes);
|
||
}
|
||
var newImgBytes = ib.BuildNewSize(800, 800, 85);
|
||
Bitmap bitmap = null;
|
||
using (MemoryStream ms = new MemoryStream(newImgBytes))
|
||
{
|
||
//skuImgItem.pictureBox2.Image = Image.FromStream(ms);
|
||
// 将image转成bitmap以后使用才能释放生成MemoryStream,否则保存Image对象到文件会产生GDI+中发生一般性错误
|
||
bitmap = new Bitmap(Image.FromStream(ms));
|
||
// 打码,打上马赛克
|
||
var x = txtXPos.Text.ParseToInt();
|
||
var y = txtYPos.Text.ParseToInt();
|
||
var cx = txtXSize.Text.ParseToInt();
|
||
var cy = txtYSize.Text.ParseToInt();
|
||
//bitmap = ApplyMosaicEffect(bitmap, new Rectangle(665, 740, 125, 50), 25);
|
||
bitmap = ApplyMosaicEffect(bitmap, new Rectangle(x, y, cx, cy), 60);
|
||
//skuImgItem.pictureBox2.Image = bitmap;
|
||
}
|
||
|
||
string imgBase64 = "";
|
||
using (MemoryStream memoryStream = new MemoryStream())
|
||
{
|
||
bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Jpeg);
|
||
byte[] imageBytes = memoryStream.ToArray();
|
||
imgBase64 = Convert.ToBase64String(imageBytes);
|
||
}
|
||
string img_md5 = BaseClass.GetMd5(imgBase64);
|
||
|
||
var url = BaseClass.BuildObjString("product/add_sku_image");
|
||
var data = UserLogin.GetSignaturex();
|
||
data += "&img_base64=" + imgBase64;
|
||
data += "&img_md5=" + img_md5;
|
||
data += "&product_id=" + skuImgItem.ProdId;
|
||
data += "&spec_id=" + skuImgItem.SpecId;
|
||
data += "&spec_name=" + skuImgItem.SpecName;
|
||
data += "&original_img_url=" + skuImgItem.SpecImgUrl;
|
||
data += "&original_img_url_md5=" + BaseClass.GetMd5(skuImgItem.SpecImgUrl);
|
||
|
||
var html = GetHtml.PostUtf8(url, data);
|
||
if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200"))
|
||
html = GetHtml.PostUtf8(url, data);
|
||
if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200"))
|
||
html = GetHtml.PostUtf8(url, data);
|
||
if (string.IsNullOrEmpty(html) || !html.Contains("\"code\":200"))
|
||
{
|
||
BaseMsgForm.ShowError("sku图片上传服务端失败,请重试!" + BaseRegex.GetStringJson(ref html, "msg"));
|
||
return false;
|
||
}
|
||
else
|
||
{
|
||
skuImgItem.LstSkuImgInfo.Insert(0, new AiSkuImgInfo()
|
||
{
|
||
id = BaseRegex.GetIntJson(ref html, "sku_img_id"),
|
||
add_time = DateTime.Now,
|
||
mdy_time = DateTime.Now,
|
||
img_base64 = imgBase64,
|
||
img_base64_db_id = BaseRegex.GetIntJson(ref html, "sku_img_Base64_id"),
|
||
img_md5 = img_md5,
|
||
img_url = "",
|
||
original_img_url = skuImgItem.SpecImgUrl,
|
||
product_id = skuImgItem.ProdId.ParseToString(),
|
||
spec_id = skuImgItem.SpecId.ParseToString(),
|
||
spec_name = skuImgItem.SpecName,
|
||
});
|
||
skuImgItem.pbSkuImg.Image = bitmap;
|
||
}
|
||
return true;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
BaseMsgForm.ShowError("sku图片上传服务端失败!" + ex.Message);
|
||
return false;
|
||
}
|
||
}
|
||
|
||
private UcSkuImgItem currentSkuImgItem = null;
|
||
void SetCurrentSkuImgItem(UcSkuImgItem skuImgItem)
|
||
{
|
||
if (skuImgItem != null)
|
||
{
|
||
currentSkuImgItem = skuImgItem;
|
||
foreach (var item in splitContainer3.Panel2.Controls)
|
||
{
|
||
var imgItem = item as UcSkuImgItem;
|
||
if (imgItem != null && imgItem != skuImgItem)
|
||
{
|
||
imgItem.BackColor = Color.LightSteelBlue;
|
||
imgItem.chkSpecName.Checked = false;
|
||
}
|
||
}
|
||
skuImgItem.BackColor = Color.DodgerBlue;
|
||
skuImgItem.BackColor = Color.Red;
|
||
}
|
||
}
|
||
|
||
private void CefWebBrowser_AddressChanged(object sender, CefSharp.AddressChangedEventArgs e)
|
||
{
|
||
if (this.Created)
|
||
{
|
||
Invoke(new Action(() =>
|
||
{
|
||
txtUrl.Text = e.Address;
|
||
}));
|
||
}
|
||
}
|
||
|
||
private void CefWebBrowser_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e)
|
||
{
|
||
}
|
||
|
||
private void btnGoTo_Click(object sender, EventArgs e)
|
||
{
|
||
this.cefWebBrowser.Load(txtUrl.Text.Trim());
|
||
}
|
||
|
||
/// <summary>
|
||
/// 给图片打上马赛克
|
||
/// </summary>
|
||
/// <param name="original"></param>
|
||
/// <param name="mosaicRect"></param>
|
||
/// <param name="mosaicSize"></param>
|
||
/// <returns></returns>
|
||
public static Bitmap ApplyMosaicEffect(Bitmap original, Rectangle mosaicRect, int mosaicSize)
|
||
{
|
||
int width = original.Width;
|
||
int height = original.Height;
|
||
//Bitmap mosaicBitmap = new Bitmap(width, height);
|
||
//using (Graphics g = Graphics.FromImage(mosaicBitmap))
|
||
using (Graphics g = Graphics.FromImage(original))
|
||
{
|
||
//for (int x = 0; x < width; x += mosaicSize)
|
||
//{
|
||
// for (int y = 0; y < height; y += mosaicSize)
|
||
// {
|
||
// Color c = GetAverageColor(original, x, y, mosaicSize);
|
||
// Brush brush = new SolidBrush(c);
|
||
// g.FillRectangle(brush, x, y, mosaicSize, mosaicSize);
|
||
// brush.Dispose();
|
||
// }
|
||
//}
|
||
for (int x = mosaicRect.X; x < width && x < mosaicRect.Right; x += mosaicSize)
|
||
{
|
||
for (int y = mosaicRect.Y; y < height && y < mosaicRect.Bottom; y += mosaicSize)
|
||
{
|
||
Color c = GetAverageColor(original, x, y, Math.Min(mosaicRect.Right - x, mosaicSize), Math.Min(mosaicRect.Bottom - y, mosaicSize));
|
||
Brush brush = new SolidBrush(c);
|
||
g.FillRectangle(brush, x, y, Math.Min(mosaicRect.Right - x, mosaicSize), Math.Min(mosaicRect.Bottom - y, mosaicSize));
|
||
brush.Dispose();
|
||
}
|
||
}
|
||
}
|
||
//return mosaicBitmap;
|
||
return original;
|
||
}
|
||
static Color GetAverageColor(Bitmap bmp, int x, int y, int xsize, int ysize)
|
||
{
|
||
int r = 0, g = 0, b = 0;
|
||
int count = 0;
|
||
for (int i = x; i < x + xsize && i < bmp.Width; i++)
|
||
{
|
||
for (int j = y; j < y + ysize && j < bmp.Height; j++)
|
||
{
|
||
Color c = bmp.GetPixel(i, j);
|
||
r += c.R; g += c.G; b += c.B; count++;
|
||
}
|
||
}
|
||
return Color.FromArgb(r / count, g / count, b / count);
|
||
}
|
||
}
|
||
}
|