cv::Mat image = cv::Mat::ones(pixelHeight, pixelWidth, CV_8UC3) * 255; int tmp = 57; for(int i = 0; i < 4;i++) { cv::putText(image, nativeText, cv::Point((int)x, (int)y + i*57), cv::FONT_HERSHEY_SIMPLEX, size, cv::Scalar(0, 0, 0), 3, cv::LINE_AA,false); }改为生成白底黑字的图片
时间: 2024-02-28 18:54:57 浏览: 98
您可以通过将 `putText` 函数中的 `cv::Scalar(0, 0, 0)` 更改为 `cv::Scalar(255, 255, 255)`,即可生成白底黑字的图片。最终代码如下所示:
```
cv::Mat image = cv::Mat::ones(pixelHeight, pixelWidth, CV_8UC3) * 255;
int tmp = 57;
for(int i = 0; i < 4; i++) {
cv::putText(image, nativeText, cv::Point((int)x, (int)y + i * 57), cv::FONT_HERSHEY_SIMPLEX, size,
cv::Scalar(255, 255, 255), 3, cv::LINE_AA,false);
}
```
相关问题
wpf Teigha ImageDef 示例
对于 WPF 中使用 Teigha ImageDef 的示例,以下是一个简单的代码示例:
1. 首先,确保你已经安装了 Teigha.NET,并将其添加为项目的引用。
2. 在 XAML 文件中,添加一个 Image 控件用于显示图像:
```xaml
<Image x:Name="imageControl" />
```
3. 在代码文件中,使用以下代码加载和显示图像:
```csharp
using System;
using System.IO;
using System.Windows;
using System.Windows.Media.Imaging;
using Teigha.GraphicsSystem;
using Teigha.Runtime;
namespace YourNamespace
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void LoadImage()
{
var rasterImage = new OdGiRasterImage();
// 你可以修改以下路径为你自己的图像路径
var imagePath = @"C:\path\to\your\image.jpg";
if (File.Exists(imagePath))
{
// 使用 Teigha.NET 加载图像文件
rasterImage.load(imagePath);
// 将图像转换为 WPF 的 BitmapSource
var bitmapSource = BitmapSource.Create(
rasterImage.pixelWidth(),
rasterImage.pixelHeight(),
96,
96,
ConvertPixelFormat(rasterImage.colorDepth()),
null,
rasterImage.scanLines(),
rasterImage.scanLinesStride());
// 在 Image 控件中显示图像
imageControl.Source = bitmapSource;
}
else
{
MessageBox.Show("指定的图像文件不存在!");
}
}
private PixelFormat ConvertPixelFormat(int colorDepth)
{
switch (colorDepth)
{
case 8:
return PixelFormats.Gray8;
case 24:
return PixelFormats.Bgr24;
case 32:
return PixelFormats.Bgra32;
default:
return PixelFormats.Default;
}
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
LoadImage();
}
}
}
```
这个示例演示了如何使用 Teigha.NET 加载图像文件,并将其显示在 WPF 中的 Image 控件中。你可以根据自己的需要进行修改和扩展。记得将代码中的 `YourNamespace` 替换为你自己的命名空间。
根据输入的平面图片映射每个像素点到一张新的VR全景图中,类似世界地图的全景图方式,保证映射后的内容在360VR全景中显示正常,参数1: 图像元素文件路径 参数2: 图像元素内容在VR全景图的起始坐标 参数2: 输出VR全景图大小 参数3: 输出VR全景文件路径 ;使用C++实现,使用gdi+;
实现这个功能涉及到以下几个步骤:
1. 加载原始图片
使用 GDI+ 库的 `Bitmap` 类可以很方便地加载图片。代码如下:
```c++
#include <gdiplus.h>
#pragma comment (lib,"Gdiplus.lib")
using namespace Gdiplus;
Image* image = Image::FromFile(L"path\\to\\image.jpg");
```
2. 创建 VR 全景图
创建 VR 全景图需要使用 GDI+ 库的 `Bitmap` 类,需要指定宽度和高度。代码如下:
```c++
int width = 4096; // 输出 VR 全景图宽度
int height = 2048; // 输出 VR 全景图高度
Bitmap* vrImage = new Bitmap(width, height, PixelFormat32bppARGB);
```
3. 将原始图片映射到 VR 全景图中
根据参数2中给出的起始坐标,将原始图片的每个像素点映射到 VR 全景图中对应的位置。具体实现方式可以使用双线性插值法,保证映射后的内容在 360VR 全景中显示正常。
4. 输出 VR 全景图
使用 GDI+ 库的 `Bitmap` 类的 `Save` 方法可以将 VR 全景图保存到本地文件。代码如下:
```c++
wstring outputPath(L"path\\to\\output.jpg"); // 输出 VR 全景图路径
CLSID jpegClsid;
GetEncoderClsid(L"image/jpeg", &jpegClsid); // 获取 JPEG 编码器的 CLSID
EncoderParameters encoderParams;
encoderParams.Count = 1;
encoderParams.Parameter[0].Guid = EncoderQuality;
encoderParams.Parameter[0].Type = EncoderParameterValueTypeLong;
encoderParams.Parameter[0].NumberOfValues = 1;
encoderParams.Parameter[0].Value = &quality; // 输出 JPEG 图片的质量
vrImage->Save(outputPath.c_str(), &jpegClsid, &encoderParams);
```
完整代码如下:
```c++
#include <gdiplus.h>
#include <cmath>
#pragma comment (lib,"Gdiplus.lib")
using namespace Gdiplus;
void GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
UINT num = 0; // number of image encoders
UINT size = 0; // size of the image encoder array in bytes
ImageCodecInfo* pImageCodecInfo = NULL;
GetImageEncodersSize(&num, &size);
if (size == 0)
{
return;
}
pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
if (pImageCodecInfo == NULL)
{
return;
}
GetImageEncoders(num, size, pImageCodecInfo);
for (UINT i = 0; i < num; ++i)
{
if (wcscmp(pImageCodecInfo[i].MimeType, format) == 0)
{
*pClsid = pImageCodecInfo[i].Clsid;
break;
}
}
free(pImageCodecInfo);
}
void MapPixelToVRImage(Bitmap* vrImage, Bitmap* pixelImage, int startX, int startY)
{
int vrWidth = vrImage->GetWidth();
int vrHeight = vrImage->GetHeight();
int pixelWidth = pixelImage->GetWidth();
int pixelHeight = pixelImage->GetHeight();
for (int y = 0; y < pixelHeight; ++y)
{
for (int x = 0; x < pixelWidth; ++x)
{
Color pixelColor;
pixelImage->GetPixel(x, y, &pixelColor);
int vrX = startX + (x * vrWidth) / pixelWidth;
int vrY = startY + (y * vrHeight) / pixelHeight;
Color vrColor;
vrImage->GetPixel(vrX, vrY, &vrColor);
int r = (pixelColor.GetR() + vrColor.GetR()) / 2;
int g = (pixelColor.GetG() + vrColor.GetG()) / 2;
int b = (pixelColor.GetB() + vrColor.GetB()) / 2;
Color newColor(r, g, b);
vrImage->SetPixel(vrX, vrY, newColor);
}
}
}
void CreateVRImageFromPixelImages(const WCHAR* pixelImagePath, int startX, int startY, int vrWidth, int vrHeight, const WCHAR* outputImagePath)
{
Bitmap* pixelImage = Image::FromFile(pixelImagePath);
Bitmap* vrImage = new Bitmap(vrWidth, vrHeight, PixelFormat32bppARGB);
MapPixelToVRImage(vrImage, pixelImage, startX, startY);
CLSID jpegClsid;
GetEncoderClsid(L"image/jpeg", &jpegClsid);
EncoderParameters encoderParams;
encoderParams.Count = 1;
encoderParams.Parameter[0].Guid = EncoderQuality;
encoderParams.Parameter[0].Type = EncoderParameterValueTypeLong;
encoderParams.Parameter[0].NumberOfValues = 1;
int quality = 80; // JPEG 图片的质量
encoderParams.Parameter[0].Value = &quality;
vrImage->Save(outputImagePath, &jpegClsid, &encoderParams);
delete pixelImage;
delete vrImage;
}
int main()
{
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
CreateVRImageFromPixelImages(L"path\\to\\pixelImage.jpg", 0, 0, 4096, 2048, L"path\\to\\vrImage.jpg");
GdiplusShutdown(gdiplusToken);
return 0;
}
```
阅读全文