修改显示逻辑
This commit is contained in:
@@ -101,19 +101,19 @@ namespace JoyD.Windows.CS.Toprie
|
|||||||
bool isReconnecting = _deviceManager != null && _deviceManager.ConnectionStatus == ConnectionStatus.Reconnecting;
|
bool isReconnecting = _deviceManager != null && _deviceManager.ConnectionStatus == ConnectionStatus.Reconnecting;
|
||||||
bool isPaused = _isPaused; // 使用_isPaused标志判断暂停状态
|
bool isPaused = _isPaused; // 使用_isPaused标志判断暂停状态
|
||||||
bool isPingFailed = !IsDevicePingable;
|
bool isPingFailed = !IsDevicePingable;
|
||||||
|
|
||||||
// 根据用户要求的优先级显示信息:先检查暂停状态,然后再检查Ping状态和连接状态
|
// 根据用户要求的优先级显示信息:先检查暂停状态,然后再检查Ping状态和连接状态
|
||||||
if (isPaused)
|
|
||||||
{
|
using (Graphics g = Graphics.FromImage(_infoImage))
|
||||||
// 暂停状态 - 最高优先级
|
{
|
||||||
using (Graphics g = Graphics.FromImage(_infoImage))
|
// 设置半透明背景
|
||||||
|
using (SolidBrush brush = new SolidBrush(Color.FromArgb(128, Color.Transparent)))
|
||||||
{
|
{
|
||||||
// 设置半透明背景
|
g.FillRectangle(brush, 0, 0, BUFFER_WIDTH, BUFFER_HEIGHT);
|
||||||
using (SolidBrush brush = new SolidBrush(Color.FromArgb(128, Color.Black)))
|
}
|
||||||
{
|
if (isPaused)
|
||||||
g.FillRectangle(brush, 0, 0, BUFFER_WIDTH, BUFFER_HEIGHT);
|
{
|
||||||
}
|
// 暂停状态 - 最高优先级
|
||||||
|
|
||||||
// 绘制暂停文本
|
// 绘制暂停文本
|
||||||
string text = "暂停";
|
string text = "暂停";
|
||||||
Color textColor = Color.Red;
|
Color textColor = Color.Red;
|
||||||
@@ -130,17 +130,9 @@ namespace JoyD.Windows.CS.Toprie
|
|||||||
format);
|
format);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
else if (isPingFailed || isDisconnected || isReconnecting)
|
||||||
else if (isPingFailed || isDisconnected || isReconnecting)
|
{
|
||||||
{
|
// 非暂停状态下,检查Ping状态和连接状态
|
||||||
// 非暂停状态下,检查Ping状态和连接状态
|
|
||||||
using (Graphics g = Graphics.FromImage(_infoImage))
|
|
||||||
{
|
|
||||||
// 设置半透明背景
|
|
||||||
using (SolidBrush brush = new SolidBrush(Color.FromArgb(128, Color.Black)))
|
|
||||||
{
|
|
||||||
g.FillRectangle(brush, 0, 0, BUFFER_WIDTH, BUFFER_HEIGHT);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 确定显示的文本和颜色
|
// 确定显示的文本和颜色
|
||||||
string text = "";
|
string text = "";
|
||||||
@@ -589,11 +581,8 @@ namespace JoyD.Windows.CS.Toprie
|
|||||||
if (ms.CanRead && ms.Length > 0)
|
if (ms.CanRead && ms.Length > 0)
|
||||||
{
|
{
|
||||||
// 从流中创建图像
|
// 从流中创建图像
|
||||||
using (Image tempImage = System.Drawing.Image.FromStream(ms))
|
using (Image newImage = System.Drawing.Image.FromStream(ms))
|
||||||
{
|
{
|
||||||
// 创建一个全新的位图而仅仅是克隆,确保数据完整性
|
|
||||||
Image newImage = new Bitmap(tempImage);
|
|
||||||
|
|
||||||
// 立即验证新创建的图像是否有效
|
// 立即验证新创建的图像是否有效
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -603,36 +592,23 @@ namespace JoyD.Windows.CS.Toprie
|
|||||||
if (width <= 0 || height <= 0)
|
if (width <= 0 || height <= 0)
|
||||||
{
|
{
|
||||||
Console.WriteLine("创建的图像尺寸无效");
|
Console.WriteLine("创建的图像尺寸无效");
|
||||||
newImage.Dispose();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (_lastImage == null) _lastImage = new Bitmap(newImage);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
using(Graphics g= Graphics.FromImage(_lastImage))
|
||||||
|
{
|
||||||
|
g.DrawImage(newImage,Point.Empty);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
Console.WriteLine("创建的图像无效");
|
Console.WriteLine("创建的图像无效");
|
||||||
newImage.Dispose();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 按照用户要求:收到图像数据后,将图像保存到LastImage中
|
|
||||||
// 不释放旧的LastImage,仅在控件Dispose时释放
|
|
||||||
lock (_lastImageLock)
|
|
||||||
{
|
|
||||||
// 如果是第一次设置LastImage,直接赋值
|
|
||||||
if (_lastImage == null)
|
|
||||||
{
|
|
||||||
_lastImage = newImage;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// 后续更新时,使用临时变量保存新图像,然后替换引用
|
|
||||||
Image temp = newImage;
|
|
||||||
newImage = _lastImage;
|
|
||||||
_lastImage = temp;
|
|
||||||
// 注意:这里不Dispose旧图像,只在控件Dispose时统一释放
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 按照用户要求:调用更新到UI
|
// 按照用户要求:调用更新到UI
|
||||||
// 只有当图像更新未暂停时才更新UI
|
// 只有当图像更新未暂停时才更新UI
|
||||||
if (!_isPaused)
|
if (!_isPaused)
|
||||||
|
|||||||
18
Windows/CS/Framework4.0/Toprie/Toprie/README.md
Normal file
18
Windows/CS/Framework4.0/Toprie/Toprie/README.md
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
# JoyD
|
||||||
|
|
||||||
|
### InfoImage, ImageBuffer, 图像框的bitmap, LastImage
|
||||||
|
1. 初始化时,都创建成512x384的透明bitmap
|
||||||
|
2. 中途不进行Dispose和设置为null,只在上面进行绘制
|
||||||
|
3. 仅当控件被Dispose时,才进行Dispose和设置为null
|
||||||
|
### 修改流程:
|
||||||
|
1. 暂停或恢复时,设置暂停状态,调用更新Info
|
||||||
|
2. 断开或连接时,设置连接状态,调用更新Info
|
||||||
|
3. Ping通状态变化时,修改Ping状态,调用更新Info
|
||||||
|
4. 图像更新时, 保存LastImage, 调用更新到UI
|
||||||
|
### 更新Info:
|
||||||
|
1. 如果暂停,显示暂停信息,否则如果Ping不通或断开,显示重连信息,否则清空InfoImage
|
||||||
|
2. 最后调用更新UI
|
||||||
|
### 更新UI:
|
||||||
|
1. 先将LastImage绘制到全局缓冲
|
||||||
|
2. 再将InfoImage绘制到缓冲
|
||||||
|
3. 最后一次性绘制到图像框的bitmap
|
||||||
Reference in New Issue
Block a user