| 
                 分類:[VB.NET/VB2005 以降] 
  自分なりにいろいろ試してみたのですが、どうしても上手くいかないので質問させていただきます。
  環境は以下の通りです。 OS:VISTA VS:VB.Net2008 CR:.net2008バンドル版 DB:SQLServerCE3.5
  http://dobon.net/vb/bbs/log3-14/7983.html 等を参考に、 自動的に電子印を作成し、DBに保存し、 それをクリレポに出力するような処理を作成中です。
  DBに保存された画像の背景が白いのは確認出来ているのですが、 クリレポに出力すると何故か背景が黒になってしまいます。 試す中でフォーマットが悪いのかとも思い、 いろんなフォーマットで保存してみましたが、 どのフォーマットで保存しても背景色が黒になってしまいます。
  何かヒントでも頂けると幸いです。
  画像に問題はないと思っていますが一応画像作成のあたりの処理を添付しておきます。 ※問題があるとすればBMPでDBに保存出来ない(DBの列サイズがMAX8000なので)事ぐらいでしょうか、、、
 
      Private Sub Create_Seal()
          Dim adpWk As New appworkDataSetTableAdapters.SealTblTableAdapter
          Try             ' 電子印の検索。存在しない場合のみ作成。             Using conWk As New SqlCeConnection(My.Settings.appworkConnectionString)                 conWk.Open()
                  strSQL = " SELECT COUNT(*) AS CNT"                 strSQL += " FROM SealTbl "                 strSQL += " WHERE TantoCD = " & mdlcommon.pptSys_LoginID                 Dim comWk As New SqlCeCommand(strSQL, conWk)                 Dim recWk As SqlCeDataReader = comWk.ExecuteReader
                  recWk.Read()
                  If recWk("CNT") > 0 Then                     Exit Sub                 End If             End Using
 
              '塗りつぶす全体の領域             Dim objRectangle As New Rectangle(0, 0, 60, 60)
              '描画領域とグラフィックオブジェクトの作成             Dim bitmap As Bitmap = New Bitmap(pctSeal.Width, pctSeal.Height)             pctSeal.Image = bitmap
              '描画グラフィック             Dim g As Graphics
              '塗りつぶす前の背景を白にする             pctSeal.BackColor = System.Drawing.Color.White
              g = Graphics.FromImage(pctSeal.Image)
              '円を描画します。             For index As Integer = 60 To 55 Step -1                 objRectangle.Width = index                 objRectangle.Height = index                 If index Mod 2 = 0 Then                     objRectangle.X += 1                     objRectangle.Y += 1                 End If                 g.DrawEllipse(Pens.Red, objRectangle)             Next             pctSeal.Refresh()
              ' 担当者名を取得します。             Dim strTanto As String             strTanto = mdlcommon.Get_TantoMei(mdlcommon.pptSys_LoginID)
              '' 担当者名の性の文字数をカウント。             Dim cntName As Integer = 0             For index As Integer = 0 To strTanto.Length                 If strTanto.Substring(index, 1) = " " Then                     Exit For                 End If                 cntName += 1             Next
              '文字を描画します。             'フォントオブジェクトの作成             Dim intFontSize As Integer = 0             Select Case cntName                 Case 1                     intFontSize = 20                 Case 2                     intFontSize = 20                 Case 3                     intFontSize = 20                 Case 4                     intFontSize = 20                 Case Else                     intFontSize = 10             End Select
              Dim fnt As New Font("HG正楷書体-PRO", intFontSize, FontStyle.Bold)
              '文字列を位置(0,0)、赤で表示             For index As Integer = 0 To strTanto.Substring(0, cntName).Length - 1                 g.DrawString(strTanto.Substring(index, 1), fnt, Brushes.Red, 13, 5 + (25 * index + 1))             Next
              'PNG形式で保存する             Dim fileName As String             fileName = Path.Combine("C:\APPG4\Log\", mdlcommon.pptSys_LoginID & ".png")             pctSeal.Image.Save(fileName, System.Drawing.Imaging.ImageFormat.Png)             '' ↑BMPだとCEに入らない(容量の問題)ここが問題なのかも?
              '開放             g.Dispose()
              'テーブルに保存             Using conWk2 As New SqlCeConnection(My.Settings.appworkConnectionString)                 conWk2.Open()                 Using fs As New FileStream(fileName, IO.FileMode.Open, IO.FileAccess.Read)                     'ファイルを読み込む                     Dim ImageData(fs.Length) As Byte                     fs.Read(ImageData, 0, System.Convert.ToInt32(fs.Length))                     fs.Close()
                      adpWk.Insert(mdlcommon.pptSys_LoginID, ImageData)                 End Using             End Using
          Catch ex As Exception             mdlErrMsg.CrtErrMsg(mErr0015, mErrT0010)             outLog(ex.Message)         End Try
      End Sub
  |