[解決済み] バイト配列からビットマップを作成するには?
2023-07-28 01:38:11
質問
バイト配列についていろいろ検索してみましたが、いつも失敗します。私はC#をコーディングしたことがなく、この方面では初心者です。バイト配列から画像ファイルを作成する方法を教えてください。
以下は、バイトを配列に格納する私の関数です。
imageData
public void imageReady( byte[] imageData, int fWidth, int fHeight))
どのように解決するのですか?
みんな、助けてくれてありがとう。私はこの答えのすべてが動作すると思います。しかし、私は私のバイト配列が生バイトを含んでいると思います。そのため、これらの解決策はすべて私のコードに作用しませんでした。
しかし、私は解決策を見つけました。多分この解決策は私のような問題を持つ他のコーダーを助けるでしょう。
static byte[] PadLines(byte[] bytes, int rows, int columns) {
int currentStride = columns; // 3
int newStride = columns; // 4
byte[] newBytes = new byte[newStride * rows];
for (int i = 0; i < rows; i++)
Buffer.BlockCopy(bytes, currentStride * i, newBytes, newStride * i, currentStride);
return newBytes;
}
int columns = imageWidth;
int rows = imageHeight;
int stride = columns;
byte[] newbytes = PadLines(imageData, rows, columns);
Bitmap im = new Bitmap(columns, rows, stride,
PixelFormat.Format8bppIndexed,
Marshal.UnsafeAddrOfPinnedArrayElement(newbytes, 0));
im.Save("C:\\Users\\musa\\Documents\\Hobby\\image21.bmp");
この解決策は8bit 256bpp (Format8bppIndexed)に対して有効です。もしあなたの画像が他のフォーマットである場合は
PixelFormat
.
そして、今、色に関する問題があります。これを解決したらすぐに、他のユーザーのために私の答えを編集します。
*PS = stride値についてはよくわかりませんが、8bitの場合は列と同じになるはずです。
また、この関数は私のために動作します... この関数は8bitのグレイスケール画像を32bitのレイアウトにコピーします。
public void SaveBitmap(string fileName, int width, int height, byte[] imageData)
{
byte[] data = new byte[width * height * 4];
int o = 0;
for (int i = 0; i < width * height; i++)
{
byte value = imageData[i];
data[o++] = value;
data[o++] = value;
data[o++] = value;
data[o++] = 0;
}
unsafe
{
fixed (byte* ptr = data)
{
using (Bitmap image = new Bitmap(width, height, width * 4,
PixelFormat.Format32bppRgb, new IntPtr(ptr)))
{
image.Save(Path.ChangeExtension(fileName, ".jpg"));
}
}
}
}
関連
-
[解決済み】トランスポート接続からデータを読み取れない:既存の接続は、リモートホストによって強制的に閉じられました。
-
[解決済み] DrawableをBitmapに変換する方法は?
-
[解決済み] enumを列挙するには
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] C#で文字列のエンコーディングを手動で指定せずに、一貫性のあるバイト表現を得るには?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] Bitmapオブジェクトに画像を読み込む際にOutOfMemoryが発生する問題
-
[解決済み] ストリームからのバイト配列の作成
-
[解決済み] JavaでInputStreamをバイト配列に変換する
-
[解決済み] Javaでバイト配列から16進文字列に変換する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み] エンティティタイプ <type> は、現在のコンテキストのモデルの一部ではありません。
-
[解決済み】「namespace x already contains a definition for x」エラーの修正方法は?VS2010にコンバートした後に発生しました。
-
[解決済み】Sequence contains no matching element(シーケンスにマッチする要素がない
-
[解決済み】取り消せないメンバはメソッドのように使えない?
-
[解決済み】2つ(またはそれ以上)のリストを1つに統合する(C# .NETで
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み】インデックスが範囲外でした。コレクションパラメータname:indexのサイズより小さく、非負でなければなりません。
-
[解決済み] 関数を終了するには?
-
[解決済み】データが存在しないのに読み込もうとする試みが無効である