|
分類:[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
|