123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- /*=========================================================================
- Library: CTK
- Copyright (c) Kitware Inc.
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- http://www.commontk.org/LICENSE
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- =========================================================================*/
- // Qt includes
- #include <QApplication>
- #include <QBuffer>
- #include <QImage>
- #include <QStyle>
- // CTK includes
- #include "ctkLogger.h"
- #include "ctkVTKScalarsToColorsUtils.h"
- // VTK includes
- #include <vtkScalarsToColors.h>
- //----------------------------------------------------------------------------
- static ctkLogger logger("org.commontk.visualization.vtk.widgets.ctkVTKScalarsToColorsUtils");
- //----------------------------------------------------------------------------
- //----------------------------------------------------------------------------
- QImage ctk::scalarsToColorsImage(vtkScalarsToColors* scalarsToColors, const QSize& size)
- {
- if (!scalarsToColors ||
- scalarsToColors->GetNumberOfAvailableColors() <= 0)
- {
- return QImage();
- }
- int width = size.width();
- int height = size.height();
- if (size.isEmpty())
- {
- width = height = qApp->style()->pixelMetric(QStyle::PM_LargeIconSize);
- }
-
- double* values = new double[width];
- const double* range = scalarsToColors->GetRange();
- for (int i = 0; i < width; ++i)
- {
- values[i] = range[0] + i * (range[1] - range[0]) / (width - 1);
- }
- QImage transferFunctionImage(width, height, QImage::Format_RGB32);
- unsigned char* colors = transferFunctionImage.bits();
- // Map the first line
- scalarsToColors->MapScalarsThroughTable2(
- values, colors, VTK_DOUBLE, width, 1, VTK_RGBA);
- delete [] values;
- // Pixels are not correctly ordered, reorder them correctly
- unsigned char* colorsPtr = colors;
- QRgb* rgbPtr = reinterpret_cast<QRgb*>(colors);
- for (int i = 0; i < width; ++i)
- {
- *(rgbPtr++) = QColor(colorsPtr[0], colorsPtr[1], colorsPtr[2]).rgb();
- colorsPtr += 4;
- }
- // Fill the other lines
- for (int i = 1; i < height; ++i)
- {
- memcpy(colors + i*VTK_RGBA*width, colors, VTK_RGBA*width);
- }
- return transferFunctionImage;
- }
- //----------------------------------------------------------------------------
- QString ctk::base64HTMLImageTagSrc(const QImage& image)
- {
- QByteArray byteArray;
- QBuffer buffer(&byteArray);
- buffer.open(QIODevice::WriteOnly);
- image.save(&buffer, "PNG");
- return QString("data:image/png;base64,%1")
- .arg(QString(buffer.data().toBase64()));
- }
|