QT 图片处理

1.qt 图片控件

在Qt中,用于显示图片的控件主要是QLabel。以下是关于Qt图片控件的详细介绍:

  1. QLabel控件
    • QLabel是Qt中用于显示文本或图片的控件。在显示图片时,QLabel通过setPixmap()函数来设置要显示的图片。
    • QPixmap代表Qt中的一张图片,可以使用QPixmap的load()函数来加载图片文件,或者通过构造函数直接指定图片路径。
    • 设置QLabel的scaledContents属性为true,可以确保图片在QLabel中完整显示,即使图片的原始尺寸与QLabel的尺寸不匹配。
  2. 添加静态图片
    • 使用QPixmap加载静态图片,然后通过QLabel的setPixmap()函数将其显示在界面上。例如:ui->label->setPixmap(QPixmap(":/picture/86.jpg"));
    • 为了确保图片完整显示,可以设置QLabel的scaledContents属性为true:ui->label->setScaledContents(true);
  3. 添加动态图片
    • Qt中的QMovie类用于播放动态图片,如GIF动画。
    • 创建一个QMovie对象,并指定GIF文件的路径。然后使用QLabel的setMovie()函数将QMovie对象与QLabel关联起来。最后,调用QMovie的start()函数开始播放动画。例如:QMovie* movie = new QMovie(":/picture/mario.gif"); ui->label->setMovie(movie); movie->start();
    • 需要注意的是,QMovie只能播放GIF格式的图片,不能播放MP4等视频格式。
  4. 自定义图片控件
    • 除了使用QLabel来显示图片外,Qt还支持编写自定义的图片控件。这通常涉及到继承QWidget类并重写其paintEvent()函数来绘制图片。
    • 在自定义控件中,你可以根据需要添加更多的功能和属性,如缩放、旋转、裁剪等。

综上所述,Qt中的图片控件主要通过QLabel实现,既可以显示静态图片也可以显示动态GIF图片。同时,Qt也支持通过自定义控件来实现更复杂的图片显示和处理功能。

2.QPixmap 详解

QPixmap 是 Qt 框架中用于图像处理的类之一。它主要用于在屏幕上显示图像,特别是在需要频繁重绘的情况下,比如在一个图形用户界面(GUI)中。QPixmap 对象可以存储图像数据,这些数据已经被优化以用于屏幕显示。

QPixmap 通常用于存储和操作位图图像,这些图像可以快速地绘制到屏幕上。与 QImage 相比,QPixmap 更适合于显示,而 QImage 更适合于图像的加载、保存和像素级别的操作。

以下是一些关于 QPixmap 的基本用法:

  1. 加载图像

    QPixmap pixmap("path_to_image.png");
  2. 从 QImage 转换

    QImage image("path_to_image.png");  
    QPixmap pixmap = QPixmap::fromImage(image);
  3. 绘制到 QWidget

    QPainter painter(this); // 假设 'this' 是一个 QWidget 指针  
    QPixmap pixmap("path_to_image.png");  
    painter.drawPixmap(0, 0, pixmap);
  4. 缩放图像

    QPixmap pixmap("path_to_image.png");  
    QPixmap scaledPixmap = pixmap.scaled(100, 100, Qt::KeepAspectRatio, Qt::SmoothTransformation);

如果你在使用 QPixmap::fromImage(image) 时遇到了内存读取错误,可能是由于以下几个原因:

  • QImage 对象 image 可能没有正确加载图像数据,或者在转换为 QPixmap 之前已经被释放或损坏。
  • 如果这个错误发生在第二次或后续的调用中,可能是因为之前的 QPixmap 对象没有被正确释放,导致了内存泄漏或其他资源管理问题。
  • 程序可能存在多线程访问冲突,特别是如果 QImage 或 QPixmap 对象在多个线程之间共享。

为了解决这个问题,你可以:

  • 确保 QImage 对象在转换为 QPixmap 之前已经成功加载了图像数据。
  • 检查代码中是否存在内存泄漏或资源管理不当的情况。
  • 如果你的程序是多线程的,确保对图像对象的访问是线程安全的。

如果你能提供更多关于错误上下文的信息,比如错误消息、代码片段或调用栈,我可能能提供更具体的帮助。

3.QImage 的图片可以直接显示吗

在Qt中,如果你想要直接显示基于某些数据生成的图片(比如从字节数组、图像缓冲区或实时计算中生成的图像),你可以使用QPixmapQImage来处理这些数据,并通过QLabel来显示它们。这里的关键是如何将你的数据转换为QPixmapQImage对象,然后将其设置为QLabel的pixmap。

以下是一个基于假设的示例,展示了如何从一个字节数组(可能来自文件、网络或计算)中创建QPixmap,并将其显示在QLabel上:

 
#include <QApplication>  
#include <QWidget>  
#include <QVBoxLayout>  
#include <QLabel>  
#include <QImage>  
#include <QPixmap>  int main(int argc, char *argv[]) {  QApplication app(argc, argv);  // 创建一个 QWidget 作为主窗口  QWidget window;  QVBoxLayout *layout = new QVBoxLayout(&window);  // 创建一个 QLabel 来显示图片  QLabel *label = new QLabel(&window);  // 假设你已经有了一个 QImage 对象,这里我们创建一个示例 QImage  QImage image(100, 100, QImage::Format_ARGB32);  image.fill(Qt::blue); // 填充为蓝色,仅作为示例  // 将 QImage 转换为 QPixmap  QPixmap pixmap = QPixmap::fromImage(image);  // 设置 QLabel 的 pixmap  label->setPixmap(pixmap.scaled(200, 200, Qt::KeepAspectRatio, Qt::SmoothTransformation));  // 将 QLabel 添加到布局中  layout->addWidget(label);  // 显示窗口  window.show();  // 进入 Qt 应用程序的主事件循环  return app.exec();  
}  #include "main.moc"

重要注意

  1. 上面的示例中,getImageData()函数应该返回包含你图像数据的QByteArray。在这个示例中,我使用了QByteArray::fromBase64()来模拟从Base64编码的字符串中获取数据,但在实际应用中,你应该从适当的源(如文件、网络请求等)获取这些数据。

  2. QPixmap::loadFromData()函数需要一个QIODevice或字节数组和格式字符串。由于loadFromData()的重载版本接受const uchar *(实际上是QByteArrayconstData()返回的)和格式字符串,上面的示例中我使用了QBuffer来将QByteArray包装成QIODevice,但实际上你可以直接使用pixmap.loadFromData(imageData, "JPEG")(如果imageData直接包含图像数据且你知道其格式)。然而,请注意,如果数据不是以null结尾的,这种方法可能不会按预期工作,因此使用QBuffer是一个更安全的选择。

  3. 请确保你的图像数据是完整的,并且格式字符串与数据的实际格式相匹配。

  4. 如果你的图像数据不是以标准图像格式(如JPEG、PNG等)存储的,你可能需要先将其转换为这些格式之一,或者编写自定义的代码来解析和渲染这些数据。

  5. 上面的scaled()方法用于调整QPixmap的大小以适应QLabel或你想要的任何尺寸,同时保持图像的宽高比。你可以根据需要调整这些参数。

 4.qt 直接显示数据的图片

在Qt中,如果你想要直接显示基于某些数据生成的图片(比如从字节数组、图像缓冲区或实时计算中生成的图像),你可以使用QPixmapQImage来处理这些数据,并通过QLabel来显示它们。这里的关键是如何将你的数据转换为QPixmapQImage对象,然后将其设置为QLabel的pixmap。

以下是一个基于假设的示例,展示了如何从一个字节数组(可能来自文件、网络或计算)中创建QPixmap,并将其显示在QLabel上:

#include <QApplication>  
#include <QWidget>  
#include <QVBoxLayout>  
#include <QLabel>  
#include <QPixmap>  
#include <QByteArray>  
#include <QBuffer>  // 假设这个函数从某个源获取图片的字节数据  
QByteArray getImageData() {  // 这里只是一个示例,通常你会从文件、网络或其他源获取数据  // 这里我们直接返回一个包含JPEG图像数据的QByteArray  // 注意:这里只是模拟,你需要替换为实际的数据获取方式  return QByteArray::fromBase64("这里应该是JPEG图像的Base64编码字符串...");  
}  int main(int argc, char *argv[]) {  QApplication app(argc, argv);  QWidget window;  QVBoxLayout *layout = new QVBoxLayout(&window);  QLabel *label = new QLabel(&window);  // 获取图像数据的字节数组  QByteArray imageData = getImageData();  // 使用QBuffer将QByteArray包装为QIODevice,因为QPixmap::loadFromData需要QIODevice  QBuffer buffer(&imageData);  buffer.open(QIODevice::ReadOnly);  // 尝试从字节数组中加载QPixmap  QPixmap pixmap;  if (!pixmap.loadFromData(buffer.readAll(), "JPEG")) { // 注意:这里假设图像是JPEG格式  // 如果加载失败,可以设置一个错误消息或默认图片  label->setText("Failed to load image from data.");  } else {  // 如果加载成功,则设置到QLabel上  label->setPixmap(pixmap.scaled(300, 300, Qt::KeepAspectRatio, Qt::SmoothTransformation));  }  layout->addWidget(label);  window.show();  return app.exec();  
}  #include "main.moc"

重要注意

  1. 上面的示例中,getImageData()函数应该返回包含你图像数据的QByteArray。在这个示例中,我使用了QByteArray::fromBase64()来模拟从Base64编码的字符串中获取数据,但在实际应用中,你应该从适当的源(如文件、网络请求等)获取这些数据。

  2. QPixmap::loadFromData()函数需要一个QIODevice或字节数组和格式字符串。由于loadFromData()的重载版本接受const uchar *(实际上是QByteArrayconstData()返回的)和格式字符串,上面的示例中我使用了QBuffer来将QByteArray包装成QIODevice,但实际上你可以直接使用pixmap.loadFromData(imageData, "JPEG")(如果imageData直接包含图像数据且你知道其格式)。然而,请注意,如果数据不是以null结尾的,这种方法可能不会按预期工作,因此使用QBuffer是一个更安全的选择。

  3. 请确保你的图像数据是完整的,并且格式字符串与数据的实际格式相匹配。

  4. 如果你的图像数据不是以标准图像格式(如JPEG、PNG等)存储的,你可能需要先将其转换为这些格式之一,或者编写自定义的代码来解析和渲染这些数据。

  5. 上面的scaled()方法用于调整QPixmap的大小以适应QLabel或你想要的任何尺寸,同时保持图像的宽高比。你可以根据需要调整这些参数。

 5.qt 显示图片控件

在Qt中,显示图片的常用控件是QLabelQLabel本身并不直接支持图片显示,但你可以通过调用其setPixmap()setPicture()方法(对于QPixmapQPicture对象)来显示图片。以下是一个简单的示例,展示了如何在Qt应用程序中使用QLabel来显示图片:

  1. 创建一个新的Qt Widgets应用程序
  2. 在UI设计器中添加一个QLabel(如果你使用Qt Designer)或直接在代码中创建一个QLabel实例。
  3. 加载图片并将其设置为QLabel的内容

代码示例

 
#include <QApplication>  
#include <QWidget>  
#include <QVBoxLayout>  
#include <QLabel>  
#include <QPixmap>  int main(int argc, char *argv[]) {  QApplication app(argc, argv);  QWidget window;  QVBoxLayout *layout = new QVBoxLayout(&window);  QLabel *label = new QLabel(&window);  // 加载图片,这里假设你有一个名为"image.jpg"的图片文件  QPixmap pixmap("image.jpg");  if (!pixmap.isNull()) {  // 如果图片加载成功,则设置到QLabel上  label->setPixmap(pixmap.scaled(300, 300, Qt::KeepAspectRatio, Qt::SmoothTransformation));  // scaled() 方法用于调整图片大小,保持原始宽高比,并使用平滑变换  } else {  // 如果图片加载失败,可以设置一个错误消息或默认图片  label->setText("Failed to load image.");  }  layout->addWidget(label);  window.show();  return app.exec();  
}  #include "main.moc"

在这个示例中,我们创建了一个简单的窗口,其中包含一个垂直布局和一个QLabel。我们尝试加载一个名为"image.jpg"的图片文件,并将其设置为QLabel的内容。如果图片加载成功,我们会使用scaled()方法来调整其大小以适应我们的需求;如果加载失败,我们会在QLabel上显示一个错误消息。

注意:确保你的图片文件路径是正确的,并且你的应用程序有权访问该文件。如果你使用Qt资源系统,你可以将图片添加到资源文件(.qrc)中,并使用:/resources/image.jpg这样的路径来引用它。

6.添加一个图片播放的窗口 

要添加一个包含图片播放功能的窗口,在Qt中,你可以使用QLabel来显示图片,并使用QTimer来定时更新显示的图片,从而实现图片播放的效果。以下是一个简单的示例,展示了如何创建一个包含图片播放功能的窗口:

  1. 创建一个Qt Widgets应用程序
  2. 设计主窗口:包含一个QLabel用于显示图片和一个可能的播放控制(如按钮用于暂停/播放、选择图片等)。
  3. 使用QTimer:设置一个定时器来定期更新QLabel中显示的图片。
  4. 图片资源:确保你的项目中有一些图片资源可以播放。

以下是一个简单的代码示例:

#include <QApplication>  
#include <QWidget>  
#include <QVBoxLayout>  
#include <QLabel>  
#include <QTimer>  
#include <QPixmap>  
#include <QPushButton>  class ImagePlayer : public QWidget {  Q_OBJECT  
public:  ImagePlayer(QWidget *parent = nullptr) : QWidget(parent), currentImageIndex(0) {  // 初始化UI  QVBoxLayout *layout = new QVBoxLayout(this);  imageLabel = new QLabel(this);  playButton = new QPushButton("Play", this);  // 假设你有一个包含图片文件名的QStringList  imageFiles = QStringList() << ":/path/to/image1.jpg" << ":/path/to/image2.jpg" << ":/path/to/image3.jpg";  layout->addWidget(imageLabel);  layout->addWidget(playButton);  // 连接信号和槽  connect(playButton, &QPushButton::clicked, this, &ImagePlayer::togglePlay);  connect(&timer, &QTimer::timeout, this, &ImagePlayer::updateImage);  // 开始播放  play();  }  private slots:  void togglePlay() {  if (timer.isActive()) {  timer.stop();  playButton->setText("Play");  } else {  play();  playButton->setText("Pause");  }  }  void play() {  if (imageFiles.isEmpty()) return;  timer.start(1000); // 每秒更新一次图片  }  void updateImage() {  if (currentImageIndex >= imageFiles.size()) {  currentImageIndex = 0; // 可以选择循环播放或停止  }  QPixmap pixmap(imageFiles[currentImageIndex]);  imageLabel->setPixmap(pixmap.scaled(imageLabel->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation));  currentImageIndex++;  }  private:  QLabel *imageLabel;  QPushButton *playButton;  QTimer timer;  QStringList imageFiles;  int currentImageIndex;  
};  int main(int argc, char *argv[]) {  QApplication app(argc, argv);  ImagePlayer player;  player.show();  return app.exec();  
}  #include "main.moc"

注意

  • 在这个示例中,我假设你有一个QStringList包含要播放的图片的文件名。你需要根据实际情况修改这些文件名。
  • 我使用了Qt的资源系统(:/path/to/image.jpg)来引用图片。如果你不使用Qt资源系统,你可以直接使用文件的绝对路径或相对路径。
  • 定时器设置为每秒更新一次图片,但你可以根据需要调整这个时间间隔。
  • 我添加了一个简单的播放/暂停按钮来控制播放。点击按钮会切换播放状态。
  • 当你到达图片列表的末尾时,我选择了循环播放。如果你不想循环播放,你可以简单地停止定时器或重置currentImageIndex

7.用数据生成图片

#include "widget.h"#include <QApplication>
#include <QImage>
#include <QColor>int main(int argc, char *argv[])
{QApplication a(argc, argv);//Widget w;//w.show();// 假设你有一个包含像素数据的数组或向量// 这里我们创建一个简单的示例数组,表示一个2x2的图像,每个像素是灰度值unsigned char pixelData[4] = { 128, 64, 192, 255 }; // 示例数据int width = 2; // 图像的宽度int height = 2; // 图像的高度// 创建一个QImage对象,指定图像的宽度、高度和格式QImage image(width, height, QImage::Format_Grayscale8);// 将像素数据复制到QImage对象中memcpy(image.bits(), pixelData, width * height * sizeof(unsigned char));// 保存图像到文件image.save("output.png");return a.exec();
}

8.qt 用数据生成图片

 

在Qt中,你可以使用QImageQPixmap类来根据数据生成图片。以下是一个简单的示例,说明如何使用QImage根据一些数据生成图片:

#include <QImage>  
#include <QColor>  
#include <QPainter>  // 假设你有一个二维数组或类似的数据结构来表示图像的每个像素值  
int data[100][100]; // 只是一个示例,你可以根据你的数据源来调整  int main() {  QImage image(100, 100, QImage::Format_RGB32); // 创建一个100x100像素的RGB图像  QPainter painter(&image);  for (int y = 0; y < 100; ++y) {  for (int x = 0; x < 100; ++x) {  // 假设data[y][x]的值在0到255之间,代表灰度值  QColor color(data[y][x], data[y][x], data[y][x]); // 使用灰度值创建颜色  image.setPixelColor(x, y, color); // 设置图像的像素颜色  }  }  // 保存图像到文件  image.save("output.png");  return 0;  
}

注意:

  1. 上面的代码是一个简化的示例,你可能需要根据你的具体需求进行调整。
  2. data数组只是一个示例,你可能需要从其他数据源(如文件、传感器等)获取图像数据。
  3. QImage::Format_RGB32表示每个像素由红色、绿色、蓝色和alpha(透明度)四个通道组成,每个通道8位。如果你的数据是灰度图像,你也可以选择其他格式,如QImage::Format_Grayscale8
  4. QPainter在这里其实并没有用到,但如果你需要在图像上绘制更复杂的内容(如线条、文本等),它会很有用。在这个简单的示例中,你可以省略它。
  5. setPixelColor方法用于直接设置图像的像素颜色。如果你有更复杂的需求,如渐变、模糊等效果,你可能需要使用QPainter来绘制。
  6. 最后,使用save方法将图像保存到文件。你可以选择不同的文件格式,如PNG、JPG等。

8.用像素点的数据生成图片 

在Qt中,如果你已经有了一个包含像素点数据的数组,并且想用这些数据生成一张图片,你可以使用QImage类来实现。以下是一个示例,展示了如何使用像素点数据生成一张灰度图片:

#include <QImage>  
#include <QColor>  int main() {  const int width = 100;  // 图片的宽度  const int height = 100; // 图片的高度  // 假设你有一个包含灰度值的二维数组  unsigned char pixelData[height][width];  // 填充像素数据数组(这里只是示例数据)  for (int y = 0; y < height; ++y) {  for (int x = 0; x < width; ++x) {  // 例如,根据x和y的坐标计算灰度值  pixelData[y][x] = static_cast<unsigned char>((x + y) % 256);  }  }  // 创建一个QImage对象,使用Format_Grayscale8格式表示8位灰度图像  QImage image(width, height, QImage::Format_Grayscale8);  // 将像素数据复制到QImage对象中  for (int y = 0; y < height; ++y) {  for (int x = 0; x < width; ++x) {  image.setPixel(x, y, pixelData[y][x]);  }  }  // 保存图像到PNG文件  image.save("output.png");  return 0;  
}

在这个示例中,我们首先定义了一个二维数组pixelData来存储灰度值(0-255)。然后,我们创建了一个QImage对象,指定了图像的宽度、高度和格式(在这个例子中是8位灰度格式)。接下来,我们使用双重循环将pixelData数组中的数据复制到QImage对象中,通过setPixel方法设置每个像素的灰度值。最后,我们将图像保存为PNG文件。

请注意,这个示例假设你已经有了像素数据。在实际应用中,你可能需要从文件、网络或其他数据源中获取这些数据。此外,如果你处理的是彩色图像,你需要为每个像素指定红色、绿色和蓝色通道的值,而不是单一的灰度值。这通常意味着你需要一个更大的数据结构来存储每个像素的颜色信息,并且你可能需要使用QImage::Format_RGB32或类似的格式来创建图像。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/45898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分析函数关系调用

参考下面 这个是专题 https://blog.csdn.net/benkaoya/category_7550213.html 绘制函数调用图&#xff08;call graph&#xff09;&#xff08;4&#xff09;&#xff1a;doxygen graphviz 绘制函数调用图&#xff08;call graph&#xff09;&#xff08;4&#xff09;&…

面试内容集合

用例设计方法 &#xff08;一&#xff09;等价类划分  常见的软件测试面试题划分等价类: 等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的.并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试.因此,可以把全部输入数据合理…

智慧校园毕业管理:全面解读毕业批次功能

在智慧校园的毕业管理系统中&#xff0c;毕业批次模块通过其精心设计的毕业批次功能&#xff0c;为即将离校的学子们提供了一个高效、便捷的过渡平台。这一特色功能聚焦于特定时间段内的毕业生群体&#xff0c;巧妙融合数字技术&#xff0c;从信息核实到最终的离校程序&#xf…

代码随想录二刷7.22|977.有序数组的平方

暴力解法&#xff1a; ——如果想暴力解决这个问题的话&#xff0c;可以像题目那样&#xff0c;先将每一个元素平方&#xff0c;然后再排序 双指针&#xff1a; ——从题目中找到的信息&#xff1a;这是一个非递减顺序的整数数组&#xff0c;从例子中&#xff0c;可以容易看…

西邮计科嵌入式复习

西邮嵌入式复习 一、第一章复习二、第二章复习三、第三章复习四、第四章复习 一、第一章复习 二、第二章复习 三、第三章复习 四、第四章复习

【YashanDB知识库】YAS-02024 lock wait timeout, wait time 0 milliseconds

【标题】错误码处理 【问题分类】锁等待超时 【关键字】YAS-02024 【问题描述】执行语句时候&#xff0c;因锁等待超时执行语句失败 【问题原因分析】数据库默认锁等待时间为0秒&#xff0c;如果执行语句存在锁等待过长会执行失败 【解决/规避方法】 1、调整锁等待的时间…

内网服务器通过squid代理访问外网

一、背景 现在要对172.16.58.158服务器进行openssh升级操作,我用之前写好的升级脚本执行后,发现没有备份旧的ssh程序文件,然后还卸载了oenssl-devel,然后我发现其他服务器ssh该服务器失败。同时脚本执行时报错“ configure: error: *** zlib.h missing - please install first …

Python项目开发实战,图像网站下载,案例教程编程实例课程详解

Python项目开发实战中,图像网站下载是一个既实用又充满挑战的项目。这类项目不仅能够帮助开发者掌握Python编程的基本技能,还能深入理解网络爬虫、图像处理、数据存储等高级技术。 一、项目背景与目标 在数字化时代,图像作为信息传递的重要载体,广泛应用于广告、设计、教育…

扩展欧几里得c++

扩展欧几里得c 裴蜀&#xff08;贝祖&#xff09;定理扩展欧几里得求解递归代码 裴蜀&#xff08;贝祖&#xff09;定理 法国数学家艾蒂安裴蜀&#xff0c;对任何整数a、b和它们的最大公约数d若a,b是整数,且gcd(a,b)d&#xff0c;那么对于任意的整数x,y,axby都一定是d的倍数一…

无人驾驶大热,新能源汽车智能化中的算网支持

来源新华社&#xff1a;百度“萝卜快跑”全无人驾驶汽车行驶在路上 当前&#xff0c;新能源汽车产业数智化已成为全球汽车产业数字化转型的焦点。一方面&#xff0c;随着人工智能、大数据、云计算等技术的深度融合&#xff0c;新能源汽车在自动驾驶、智能互联、能源管理等方面…

xmind梳理测试点,根据这些测试点去写测试用例

基本流&#xff08;冒烟用例必写&#xff09; 备选流 公共测试点&#xff1a;

Linux服务监控自动巡检脚本--推送钉钉告警

1. 编写服务监控自动巡检脚本 [rootlocalhost ~]# cat /opt/port_monitor_alarm_by_dingding.sh #!/bin/bash# 定义需要监控服务对应的端口列表 port_list"3308 1242 35690 65500 10410"# 定义接收通知的钉钉机器人的 Webhook URL webhook_url"https…

【题解】42. 接雨水(动态规划 预处理)

https://leetcode.cn/problems/trapping-rain-water/description/ class Solution { public:int trap(vector<int>& height) {int n height.size();// 预处理数组vector<int> lefts(n, 0);vector<int> rights(n, 0);// 预处理记录左侧最大值lefts[0] …

GuLi商城-商品服务-API-品牌管理-OSS前后联调测试上传

服务端签名直传 这种方式文件上传不用走自己的服务器了 zhouyimo.oss-cn-beijing.aliyuncs.com 后端启动: nacos: 虚拟机启动:里面mysql自动启动 前端项目启动:npm run dev 单文件上传和多文件上传地址都要改成自己的外网访问地址

文本语言的上升沿写法

通过两个上升沿来调用不用的程序 def trap1(): global stn1 stn1 True 将全局变量stn1置True def trap2(): global stn2 stn2 True 将全局变量stn2置True pre_sig get_standard_digital_out(0) pre_sig2 get_standard_digital_out(1) while True: sig get_standard_…

Android帧布局的概念与属性

帧布局&#xff08;FrameLayout&#xff09;顾名思义就是将控件一层一层叠在一起&#xff0c;像视频的帧一样&#xff0c;一层叠一层&#xff0c;如图所示&#xff0c;帧布局中BUTTON叠在ImageView之上。帧布局常见的属性见表1。帧布局中的控件可以使用android:layout_gravity&…

c语言alpha-beta剪枝六子棋

c语言Alpha-Beta剪枝算法六子棋[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2i5w8kc1-1720756528545)(https://i-blog.csdnimg.cn/direct/464b9db7d6384a63ab8c3213efff0e99.png)] 1.介绍 Alpha-Beta剪枝算法是一种用于优化博弈树搜索的算法&…

Minio搭建文件服务器的学习

MinIO是一个高性能的开源对象存储服务器&#xff0c;与Amazon S3兼容。它使用Go语言编写&#xff0c;可以在多种操作系统上运行&#xff0c;如Linux、MacOS和Windows等。MinIO的分布式特性使其能够轻松扩展存储容量和处理能力&#xff0c;满足大规模数据存储的需求。 使用Docke…

展望未来:在【PyCharm】中结合【机器学习】实现高效的图形化处理

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 文章目录 引言一、PyCharm简介与配置1.1 PyCharm基础1.2 图形化库配置 二、机器学习项目中的数据可视化2.1 数据加载与预处理2.2 数据探索性可视化2.3 模型训练与结果可视化 三、PyCharm中的图形化调试四、高级…

setContentView 流程

setContentView 流程 Activity -> setContentView 开发者设置入口PhoneWindow -> setContentView mWindow 在 attach 时初始化为 PhoneWindow&#xff0c;同时PhoneWindow也是Window唯一的实现类PhoneWindow -> installDecor 这一步的作用是 初始化DecorView, 把Deco…