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