C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 32767pxを超える画像の一部描画について


(過去ログ 55 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■31213 / inTopicNo.1)  32767pxを超える画像の一部描画について
  
□投稿者/ 鶏唐揚 (323回)-(2009/01/16(Fri) 16:46:59)

分類:[VB.NET/VB2005 以降] 

2009/01/16(Fri) 17:20:41 編集(投稿者)

[OS]XP/Vista
[VB]2008

お世話になっております。

今回画像の描画で少々行き詰ってしまいました

横に長い画像(BitMap)を内部で作っておき、画面にはその一部を描画するというロジックで、
DrawImageでWidthに640を指定して描画しています。

しかし、内部画像の幅が32767を超えると描画幅が32767以下でもパラメータ不正の例外が発生します

一定サイズごとにBitMapオブジェクト配列にして、描画位置によって要素数をこねくり回すのは最後の手段としたいので
何か回避策・対処法・その他情報などありましたらご教示お願いします

#タイトル修正
引用返信 編集キー/
■31222 / inTopicNo.2)  Re[1]: 32767pxを超える画像の一部描画について
□投稿者/ Azulean (265回)-(2009/01/17(Sat) 09:13:07)
推測で書いています。
裏付けはありません。

> しかし、内部画像の幅が32767を超えると描画幅が32767以下でもパラメータ不正の例外が発生します
明確に述べたドキュメントを見つけられませんでしたが、恐らく.NET Frameworkが内部で利用しているGDI+の制限のように思えます。
32767はshort型の正方向の最大値で、32768でshort型の範囲を超えます。

この制限が露見しない、議論されない、問題になっていない理由としては、一辺のいずれかが32767を越えるケースがレアケースだからではないでしょうか。
short型の制限があっても、通常の使用では問題ないとしてGDI+が設計されているのかもしれません。
# もしくは、古い古い16bit時代のコードが残っているとか。


回避策としてはビットマップをぶった切るしかないんじゃないかなぁ。
ビットマップの高さや、これ以上の広げたい幅によりますが、ぶった切ったところでメモリの限界が見えてきます。
直近で必要にならなさそうな所はファイルに書き出すなりして、メモリから追い出してしまうとかも考えていかないといけない可能性はあります。
引用返信 編集キー/
■31225 / inTopicNo.3)  Re[2]: 32767pxを超える画像の一部描画について
□投稿者/ 鶏唐揚 (324回)-(2009/01/17(Sat) 18:36:59)
No31222 (Azulean さん) に返信
> 回避策としてはビットマップをぶった切るしかないんじゃないかなぁ。
> ビットマップの高さや、これ以上の広げたい幅によりますが、ぶった切ったところでメモリの限界が見えてきます。
> 直近で必要にならなさそうな所はファイルに書き出すなりして、メモリから追い出してしまうとかも考えていかないといけない可能性はあります。
返信ありあがとうございます

目的は目盛りで、スクロールや書き直しのたびに目盛り位置を計算して描画するのは遅くなると思い、
高さ18px程度の目盛り画像をあらかじめ作っておこうかと考えていたのです(幅は最大でも180000pxほど)

ちょっといろいろ方法を考えてみます...
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -