2

.NET で ImageList を使用しているとき、私はとても混乱しています。まず、3 つの異なる ImageList を含むグローバル オブジェクト (ImageManager) があります。

  • smallImages(サイズ: 16x16) - 50 枚の画像が含まれています (デザイナーから追加)
  • largeImages(サイズ: 48x48) - 0 個の画像が含まれています
  • gridImages(サイズ: 16x16) - 17 枚の画像が含まれています (デザイナーから追加)

ImageManager は起動時に一度初期化されます。gridImagesグリッド コントロール (JanusGridEx) で使用され、値渡しされます。実行時 (グリッド コントロール内) に 3 つの新しいイメージを に追加していgridImagesます。私は3つの異なる方法でそれを追加しようとしていました:

  • 初挑戦
Dim ImageBuffer As Byte() = CType(DataRow(pColumnImageName), Byte())
gridImages.Images.Add(imageKey, New Icon(New MemoryStream(ImageBuffer)))
  • 2 回目の試行
 Dim ImageBuffer As Byte() = CType(DataRow(pColumnImageName), Byte())
 Dim newImage As Image = Image.FromStream(New MemoryStream(ImageBuffer))
 gridImages.Images.Add(newImage)
  • 3回目の試行(これが最善の方法だと思います-間違っている場合は修正してください)
Dim ImageBuffer As Byte() = CType(DataRow(pColumnImageName), Byte())
Using ms As New MemoryStream(ImageBuffer , 0, ImageBuffer.Length)
      gridImages.Images.Add(imageKey, Image.FromStream(ms))
End Using

今問題は、最後の画像がそれに追加されたときgridImagesです。imageKey または index(gridImages.Images(20))を使用して最後の画像を取得すると、例外が発生します: callstack System.ArgumentException: Parameter is not valid.:

System.ArgumentException: パラメーターが無効です。System.Drawing.Bitmap.LockBits (Rectangle rect、ImageLockMode フラグ、PixelFormat 形式、BitmapData bitmapData) で System.Drawing.Bitmap.LockBits (Rectangle rect、ImageLockMode フラグ、PixelFormat 形式) で System.Windows.Forms.ImageList.GetBitmap ( Janus.Windows.GridEX.Internal.JNSBB.a(Graphics、Brush、String、Image、Rectangle、ImageHorizo​​ntalAlignment、ImageVerticalAlignment、JNSDQ、Font、 Boolean 、 Int32 、 ImageList 、 Boolean ) Janus.Windows.GridEX.EditControls.JNSAQ.a(Graphics 、 Int32 、 Rectangle ) で Janus.Windows.GridEX.EditControls.JNSAQ.a(Graphics ) で Janus.Windows.GridEX.EditControls .JNSAQ.OnPaint(PaintEventArgs e) System.Windows.Forms.Control.

最初の質問:それはなぜですか? Image の新しいインスタンスを作成し、それをディスクに保存しようとしても、正しく動作します。

2 番目の質問: ImageList を値でグリッド コントロールに渡す前に、ImageList の新しいインスタンスを作成し、すべての画像を ImageList (ImageManager) からそのインスタンス (DeepCopy) にコピーします。DeepCopy を作成して新しいイメージを新しい ImageList に追加すると、正常に動作します。何故ですか?なぜ機能しているのですか?

4

0 に答える 0