私はrestAPIを使用してPythonから2d numpyのrgb配列を取得しています。これをC++を使用して作成してイメージしたいと思います。またはあなたはnumpyからC++の同様のライブラリを知っていますか?2d rgb配列を持つC++でイメージを作成するにはどうすればよいですか?
-1
A
答えて
0
非常に簡単にビットマップ(.bmp拡張子)を作成できます。
https://github.com/ArashPartow/bitmapのようなライブラリを使用できます。狭いユースケースを持つライブラリは、通常かなり読みやすいです。この場合、ロジックはすべて1つのhppファイルに含まれます。それを見て、それは少し異なる複雑なケースを扱うので、少し複雑です。
または、自分で行うこともできます。バイナリのビットマップヘッダを書く方法を調べ、fstreamを使ってファイルに書き出します。 ios::out | ios::binary
を書き込むためにファイルを開くときにバイナリオプションを使用したいと思うでしょう。ビットマップヘッダとファイルフォーマットの詳細は、https://en.wikipedia.org/wiki/BMP_file_format
です。ちなみに、Wikipediaにはバイナリファイルフォーマットとビットバイビットテーブルがあります。
さまざまなフォーマットを扱わない非常に単純な実装では、これまでこれを行ってきました。
BitmapFileHeader.h
#pragma once
#include <cstdint>
#pragma pack(push, 2)
struct BitmapFileHeader
{
char header[2]{'B', 'M'};
uint32_t fileSize;
uint32_t reserved{};
uint32_t dataOffset;
};
#pragma pack(pop)
BitmapInfoHeader.h
#pragma once
#include <cstdint>
#pragma pack(push, 2)
struct BitmapInfoHeader
{
uint32_t headerSize{ 40 };
uint32_t width{ 0 };
uint32_t height{ 0 };
uint16_t planes{ 1 };
uint16_t bitsPerPixel{ 24 };
uint32_t compression{ 0 };
uint32_t dataSize{ 0 };
uint32_t horizontalResolution{ 2400 };
uint32_t verticalResolution{ 2400 };
uint32_t colors{ 0 };
uint32_t importantColors{ 0 };
};
#pragma pack(pop)
Bitmap.h
#include <string>
#include <iostream>
#include <cstdint>
#include <memory>
#include <fstream>
#include "BitmapFileHeader.h"
#include "BitmapInfoHeader.h"
using namespace std;
class Bitmap
{
private:
int m_width{ 0 };
int m_height{ 0 };
unique_ptr<uint8_t[]> m_pixels{ nullptr };
public:
struct RBG {
uint8_t r;
uint8_t b;
uint8_t g;
};
Bitmap(int width, int height) : m_width(width),
m_height(height), m_pixels(new uint8_t[width * height * sizeof(RBG)]{}) {};
void setPixel(int, int, RBG);
void setDimensions(int, int);
int getSize();
bool write(string);
~Bitmap();
};
Bitmap.cpp
#include "stdafx.h"
#include "Bitmap.h"
using namespace std;
void Bitmap::setPixel(int x, int y, RBG color)
{
uint8_t *pixel = m_pixels.get();
pixel = pixel + ((y * sizeof(RBG)) * m_width) + (x * sizeof(RBG));
// little endian
pixel[0] = color.b;
pixel[1] = color.g;
pixel[2] = color.r;
}
void Bitmap::setDimensions(int w, int h)
{
m_width = w;
m_height = h;
}
int Bitmap::getSize()
{
return m_width * m_height * sizeof(RBG);
}
bool Bitmap::write(string filename)
{
BitmapFileHeader fileHeader;
BitmapInfoHeader infoHeader;
fileHeader.fileSize = sizeof(BitmapFileHeader) + sizeof(BitmapInfoHeader) + getSize();
fileHeader.dataOffset = sizeof(BitmapFileHeader) + sizeof(BitmapInfoHeader);
infoHeader.width = m_width;
infoHeader.height = m_height;
ofstream file;
file.open(filename, ios::out | ios::binary);
if (!file)
{
return false;
}
file.write(reinterpret_cast<char *>(&fileHeader), sizeof(fileHeader));
file.write(reinterpret_cast<char *>(&infoHeader), sizeof(infoHeader));
file.write(reinterpret_cast<char *>(m_pixels.get()), getSize());
file.close();
return true;
}
Bitmap::~Bitmap()
{
cout << "bitmap destroyed" << endl;
}
関連する問題
- 1. 2D int配列をStreamsで2D String配列に変換するにはどうすればよいですか?
- 2. Rubyで2D配列を動的に作成するにはどうすればよいですか?
- 3. 2D配列を別の2D配列に挿入するにはどうすればよいですか? (Ruby)
- 4. Luaで2D配列を作成するにはどうすればよいですか?
- 5. Dで2D配列を作成するにはどうすればよいですか?
- 6. JSONエンコードされた2D配列を作成するにはどうすればよいですか?
- 7. 2D配列でコンストラクタパラメータを渡すにはどうすればよいですか?
- 8. 複数のタイムスタンプを持つnumpy配列を作成するにはどうすればよいですか?
- 9. Cで2Dのmallocされた配列を解放するにはどうすればよいですか?
- 10. C#データを格納する配列/行列を作成するにはどうすればよいですか?
- 11. イメージの一部を持つテキストを作成するにはどうすればよいですか?
- 12. Python 3.6でbytes(1D)配列をRGB配列(2D)に変換するにはどうすればよいですか? (NumPyかSciPy?)
- 13. 2D配列の列に1D配列を格納するにはどうすればよいですか?
- 14. ダブルGET変数を持つ配列を作成するにはどうすればいいですか
- 15. Cでこの2D配列を初期化するにはどうすればよいですか?
- 16. C#でEnumの2D配列を宣言するにはどうすればよいですか?
- 17. Cで2D配列を入力するにはどうすればよいですか?
- 18. 2D配列を使用するにはどうすればいいですか?
- 19. (配列の)配列の動的配列を作成するにはどうすればよいですか?
- 20. C#で2Dオブジェクト配列を2D文字列配列に変換するにはどうすればよいですか?
- 21. numpy 2D配列にnumpy 1D配列を乗算するにはどうすればよいですか?
- 22. 3D配列をGASの2D配列に変換するにはどうすればよいですか?
- 23. 2D配列の列値の平均を見つけるにはどうすればよいですか?
- 24. 配列をC言語で関数globalで作成させるにはどうすればよいですか?
- 25. Python:イメージの各ピクセルに関する情報を持つ配列を作成するにはどうすればよいですか?
- 26. C#で固定長バイト配列のユーザータイプを作成するにはどうすればよいですか?
- 27. Cでオブジェクトの配列を作成するにはどうすればよいですか?
- 28. Cのプロシージャで動的配列を作成するにはどうすればよいですか?
- 29. JSPで多次元http-post配列を作成するにはどうすればよいですか?
- 30. 2D配列でローカル最小値を見つけるにはどうすればよいですか?
どのような画像ですか?それをディスクに保存して表示したいのですか? –
pngまたはbmpと表示したい –