質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

2回答

817閲覧

JPEGデータをbyte配列として受け取る際の適切なバッファサイズ

poge

総合スコア15

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/04/13 02:44

編集2022/01/12 10:55

前提・実現したいこと

VGAサイズのJPEG(JFIF?)データをbyte配列として返す関数が存在します。
データを受け取る変数のバッファサイズはいくつが適切でしょうか。

VGAサイズのJPEGデータの最大サイズがわかれば良いと考えています。
※たとえば24bitのBITMAPなら、6404803(RGB) = 921600 byte

特殊なメタデータ等を含まない一般的なヘッダ等のサイズと、画像部分(640*480)の最大サイズがわかればと思います。

ご助言よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Jpegは(圧縮時の設定にもよりますが)おおむね8x8の塊で画像を圧縮していきますので、画像部分については、((幅+7)/8)*8 * ((高+7)/8)*8 * チャンネル数で収まるんじゃないかと思います。

ヘッダについては、これも圧縮時によって変わりますので、一概には決められません。


追記:式の意味について

画像が納まり、かつ8で割り切れる数を求めたい場合を、最小のケースを例に考えます。
1x1の画像があったとします。これがおさまり、かつ、8で割り切れる数は、幅高ともに8です。

これを求めるために、上記の計算式を用います。
まず(幅+7)=1+7=8ですね。この数自体に意味はありません。
次に、割る8ですが、整数で考えます。整数の割り算は余りを切り捨てます。
(1+7)/8 = 8/8 = 1 です。8ピクセルの最小単位の個数になります。
最後に掛ける8です。ピクセル単位に戻してやります。
((1+7)/8)*8 = 8、で、答えが求まりました。

仮に8x8の画像であった場合も、収まりつつ8で割り切れる数は8です。
(8+7) = 15、(8+7)/8 = 1 です。小数点以下は切り捨てです。
((8+7)/8)*8 = 8です。

これが9x9になったらどうでしょう。8x8の最小単位では収まりきらないので、16x16になることは予想できますね。
先ほどの計算式に当てはめてみましょう。
(9+7) = 16、(9+7)/8 = 2、((9+7)/8)*8 = 16です。

最初に7を足しこむことで、8で割り切れる天井の値を手に入れることができます。

うーん、伝わるかなぁ。。。

投稿2018/04/13 03:00

編集2018/04/13 06:42
kazto

総合スコア7196

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

poge

2018/04/13 06:15

チャンネル数というのはRGBであれば3ということでしょうか? 教示頂いた式を展開すると、以下の式になる認識で正しいでしょうか? (幅+7) * (高+7) * チャンネル数 実値をあてはめると、 (640+7) * (480 + 7) * 3 ということでしょうか? 7という数値は何に由来するものなのでしょうか? 質問ばかりで申し訳ありません。
kazto

2018/04/13 06:21

> RGBであれば3 はい。 > 教示頂いた式を展開 展開しないでください。補足を回答に記載します。
guest

0

VGAサイズのJPEG(JFIF?)データをbyte配列として返す関数が存在します。

というなら、その関数の結果のbyte配列のサイズを見て、バッファを確保すればよろしいかと。

投稿2018/04/13 03:21

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

poge

2018/04/13 06:11

使用する関数のコードは変更できず、使用する関数の引数にバッファサイズを指定しなければなりません。 関数内で引数に渡したバッファサイズが、実データサイズを上回る場合、例外がスローされます。 上記理由より、あらかじめ最大時の値が知りたいと考えています。
y_waiwai

2018/04/13 06:47

そういうはなしなら、全体の画素数*色深度*3(3原色)ってことになり、やっぱ別回答の方のような計算式となりますねー
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問