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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 >>
■31213  32767pxを超える画像の一部描画について
□投稿者/ 鶏唐揚 -(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オブジェクト配列にして、描画位置によって要素数をこねくり回すのは最後の手段としたいので
    何か回避策・対処法・その他情報などありましたらご教示お願いします

    #タイトル修正
親記事 /過去ログ55より / 関連記事表示
削除チェック/

■31222  Re[1]: 32767pxを超える画像の一部描画について
□投稿者/ Azulean -(2009/01/17(Sat) 09:13:07)
    推測で書いています。
    裏付けはありません。

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

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


    回避策としてはビットマップをぶった切るしかないんじゃないかなぁ。
    ビットマップの高さや、これ以上の広げたい幅によりますが、ぶった切ったところでメモリの限界が見えてきます。
    直近で必要にならなさそうな所はファイルに書き出すなりして、メモリから追い出してしまうとかも考えていかないといけない可能性はあります。
記事No.31213 のレス /過去ログ55より / 関連記事表示
削除チェック/

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

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

    ちょっといろいろ方法を考えてみます...
記事No.31213 のレス /過去ログ55より / 関連記事表示
削除チェック/

■72564  Re[1]: DrawImage
□投稿者/ パサー -(2014/06/18(Wed) 13:14:05)
記事No.72563 のレス /過去ログ121より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -