- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 Leptonica 库处理一些图片。之后我想在我的 QT GUI 中显示它们。 Leptonica 使用他们自己的图像格式 Pix,而 QT 使用他们自己的格式 QPixmap。目前对我来说唯一的方法是将处理后的图片保存为文件(如 bmp ),然后使用 QT 函数调用再次加载它们。现在我想在我的代码中转换它们,所以我不需要绕道将它们保存在文件系统上。任何想法如何做到这一点?
最好的问候
//编辑:
好的,正如已经建议的那样,我尝试将 PIX* 转换为 QImage。PIX* 定义如下:
http://tpgit.github.com/Leptonica/pix_8h_source.html
struct Pix
{
l_uint32 w; /* width in pixels */
l_uint32 h; /* height in pixels */
l_uint32 d; /* depth in bits */
l_uint32 wpl; /* 32-bit words/line */
l_uint32 refcount; /* reference count (1 if no clones) */
l_int32 xres; /* image res (ppi) in x direction */
/* (use 0 if unknown) */
l_int32 yres; /* image res (ppi) in y direction */
/* (use 0 if unknown) */
l_int32 informat; /* input file format, IFF_* */
char *text; /* text string associated with pix */
struct PixColormap *colormap; /* colormap (may be null) */
l_uint32 *data; /* the image data */
};
虽然 QImage 为我提供了这样的方法:
http://developer.qt.nokia.com/doc/qt-4.8/qimage.html#QImage-7
QImage ( const uchar * data,
int width,
int height,
int bytesPerLine,
Format format )
我假设我不能在调用构造函数时将数据从 PIX 复制到 QImage。我想我需要逐个像素地填充 QImage,但实际上我不知道怎么做?我需要遍历所有坐标吗?我如何看待位深度?这里有什么想法吗?
最佳答案
I use这用于将 QImage 转换为 PIX:
PIX* TessTools::qImage2PIX(QImage& qImage) {
PIX * pixs;
l_uint32 *lines;
qImage = qImage.rgbSwapped();
int width = qImage.width();
int height = qImage.height();
int depth = qImage.depth();
int wpl = qImage.bytesPerLine() / 4;
pixs = pixCreate(width, height, depth);
pixSetWpl(pixs, wpl);
pixSetColormap(pixs, NULL);
l_uint32 *datas = pixs->data;
for (int y = 0; y < height; y++) {
lines = datas + y * wpl;
QByteArray a((const char*)qImage.scanLine(y), qImage.bytesPerLine());
for (int j = 0; j < a.size(); j++) {
*((l_uint8 *)lines + j) = a[j];
}
}
return pixEndianByteSwapNew(pixs);
}
这用于将 PIX 转换为 QImage:
QImage TessTools::PIX2QImage(PIX *pixImage) {
int width = pixGetWidth(pixImage);
int height = pixGetHeight(pixImage);
int depth = pixGetDepth(pixImage);
int bytesPerLine = pixGetWpl(pixImage) * 4;
l_uint32 * s_data = pixGetData(pixEndianByteSwapNew(pixImage));
QImage::Format format;
if (depth == 1)
format = QImage::Format_Mono;
else if (depth == 8)
format = QImage::Format_Indexed8;
else
format = QImage::Format_RGB32;
QImage result((uchar*)s_data, width, height, bytesPerLine, format);
// Handle pallete
QVector<QRgb> _bwCT;
_bwCT.append(qRgb(255,255,255));
_bwCT.append(qRgb(0,0,0));
QVector<QRgb> _grayscaleCT(256);
for (int i = 0; i < 256; i++) {
_grayscaleCT.append(qRgb(i, i, i));
}
if (depth == 1) {
result.setColorTable(_bwCT);
} else if (depth == 8) {
result.setColorTable(_grayscaleCT);
} else {
result.setColorTable(_grayscaleCT);
}
if (result.isNull()) {
static QImage none(0,0,QImage::Format_Invalid);
qDebug() << "***Invalid format!!!";
return none;
}
return result.rgbSwapped();
}
关于c++ - 将 Leptonica Pix 对象转换为 QPixmap(或其他图像对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8655772/
我是 Qt 和 Qt Graphics API 的新手。 我有一个较大的QPixMap和一个较小的QPixMap。我需要用较小的部分替换较大部分的一部分(QRect)。 我该如何实现这一目标? 谢谢。
我正在为一个项目使用 PyQt。但并非突然间我收到一个错误: QPixmap: It is not safe to use pixmaps outside the GUI thread in PyQt
我有一个 QPixmap,我想在 QWidget 上绘制它。但是,我想将其设置为 50% 透明,以便可以在下面看到背景。我怎样才能做到这一点? 最佳答案 您在 QPainter 中设置了组合模式然后使
我想要一个 QPixmap尺寸为 50 x 50。 我试过 : QPixmap watermark(QSize(50,50)); watermark.load(":/icoMenu/preparati
当我直接这样写图片路径的时候 QPixmap imgBtry("/some/path/resources/Battery100.png"); 它工作得很好,但当我将路径存储在变量中时它不起作用。我应该
我需要重新创建 Windows 7 主题,其中应用程序窗口标题是透明的并显示模糊的屏幕内容。我的想法是捕获屏幕内容并在标题中模糊显示它们。出于这个原因,我扩展了 QQuickPaintedItem。
我正在使用 C++ Qt 创建一个应用程序,我想加载多个图像。我想为每个图像附加一个信号,以便我可以在之后启用或禁用它们。 有什么帮助吗? 编辑 1: imageDlg = new QFileDial
我正在尝试使用 QPixmap 和 QLabel 将图像放入我的表单中。但我无法将图像加载到 QPixmap。这是我所拥有的: qDebug() << QFile("C:/img.png").exis
我正在尝试将原始像素数据转换为 QPixmap,但在将 qimage 转换为 qpixmap 时出现错误。 首先,我通过 qlocalsocket 从服务器 A 发送原始数据,客户端 B 获取它。 这
我有一个程序需要加载很多 QPixmaps。我使用 QtConcurrent::mappedReduced 将像素图的加载分成几个作业(我实际上加载了一堆 QGraphicPixmapItem s)。
我想在 Qt 中的 QPixmap 上获取鼠标按下事件。我尝试使用以下方法对其进行子类化: class CustomPixmap : public QPixmap { Q_OBJECT pub
假设我有一个尺寸为 (20 x 100) 的 QPixmap。如何创建此 QPixmap 的拷贝,该拷贝旋转了特定数量并且还具有新维度来分配旋转像素图的新维度? 我找到了多个关于如何使用 QPaint
我试图在带有 QPixmap 的 QLabel 上显示图片,但图像没有显示。有人可以帮助我吗? onglets = new QTabWidget(this); //création des on
我是 Qt 的新手,我正在用它制作游戏。我想显示图标,但在放置一些代码后我无法在任何地方找到它。我很困惑,因为我没有收到任何错误,所以我很确定我只是没有添加任何东西。帮助。 战斗.h文件 #ifnde
我正在尝试获取一个小部件的 QPixmap,但是该小部件被硬件覆盖了。它曾经有效,直到我更换显卡。有问题的代码是: ... QByteArray ba; QBuffer buffer(&ba); bu
我有一张图片,我在上面绘制了一个矩形。之后我试图将矩形的内容复制到另一个 QLabel 上。这似乎可行,但我似乎无法从图像的左上角开始对齐复制的图像。这是我正在做的 QPixmap original_
我正在开发一个视觉应用程序,我需要使用 QPixmap 对象在屏幕上显示来自相机的“实时 View ”。我们将以 30 帧/秒的速度持续更新屏幕。 我的问题是,这个应用程序必须在一些 3-5 年的旧计
我正在尝试为我的QPushButtons 设置图标。我只能通过将完整路径放入 QPixmap 构造函数来做到这一点。 类似这样的东西: m_button->setIcon(QPixmap("C:/Us
在速度表上标记了一根指针。 // 이미지 출력 QPixmap pix("C:\\Users\\WORK002\\Desktop\\speedmeter.png"); QPixmap pix2("C:
我有以下小部件: pixmap = QtGui.QPixmap(r'pics\cdaudio.png').scaled(100, 100) 图像从 256x256 缩小。它看起来很断断续续: 如何从
我是一名优秀的程序员,十分优秀!