Ich habe versucht, nach diesem zu suchen und Code, der so weit wie ich kann arbeiten, aber das resultierende Bild in meinem Crystal Report ist 5 Seiten statt 1 für irgendein Grund!Größe Bild und Platz in einem Byte-Array für CrystalReports BlobField
Grundsätzlich habe ich einen Crystal Report mit einem ganzseitigen Bild aus einem BlobField, das perfekt funktioniert, wenn das Quellbild 2409 Pixel breit und 3436 Pixel hoch bei 300 dpi ist.
Wenn ich versuche, ein Quellbild zu verwenden, das 1700 breit von 2436 hoch @ 200 dpi, die Bildhöhe zu groß ist und den Bericht auf der nächsten Seite hängt ab etwas
I „kein Problem dachte, Ich verkleinere nur das Bild und der Bericht wird korrekt angezeigt "aber ich habe große Schwierigkeiten dabei .. Hier ist der Code, den ich im Moment verwende - wenn die" normale "Bildgröße und dieser Code verwendet wird, wird alles angezeigt gut in dem Bericht, aber wenn ich Größe ändern muss, erstreckt es sich massiv weit und über fünf Seiten, die noch schlimmer ist, als es in Ruhe zu lassen! :(
Dim fs As System.IO.FileStream = New System.IO.FileStream(FilePath, System.IO.FileMode.Open, System.IO.FileAccess.Read)
Dim Image() As Byte = New Byte(fs.Length - 1) {}
fs.Read(Image, 0, CType(fs.Length, Integer))
fs.Close()
'Byte[] to image
Dim imgMemoryStream = New IO.MemoryStream(Image)
Dim myImage = Drawing.Image.FromStream(imgMemoryStream)
' Check if image is 2409 wide, if it's not then resize to 2409 while preserving aspect ratio. WIN.
If myImage.Width <> 2409 Then
MsgBox("myimage before: " & myImage.Width & " by " & myImage.Height)
myImage = ImageResize(myImage, 3436, 2409)
MsgBox("myimage after: " & myImage.Width & " by " & myImage.Height)
Else
MsgBox("myimage (already correct for printing): " & myImage.Width & " by " & myImage.Height)
End If
Dim imgMemoryStream2 As IO.MemoryStream = New IO.MemoryStream()
myImage.Save(imgMemoryStream2, System.Drawing.Imaging.ImageFormat.Jpeg)
Image = imgMemoryStream2.ToArray
objDataRow(strImageField) = Image
So packte ich das Originalbild in ein Byte-Array (wie ich die Bildgröße „normal“ ist standardmäßig übernehmen und wird es nur gerade in den BlobField einfügen) und dessen Umwandlung dann wieder in ein Bild, um die Bildgröße zu überprüfen.Wenn die Größe nicht "normal" ist, skaliere ich das Bild und wandle es dann in ein Byte-Array zurück, um es dem BlobField im Bericht zuzuführen.
Dies ist die Bildgrößenänderung Code:
Public Shared Function ImageResize(ByVal image As System.Drawing.Image, _
ByVal height As Int32, ByVal width As Int32) As System.Drawing.Image
Dim bitmap As System.Drawing.Bitmap = New System.Drawing.Bitmap(width, height, image.PixelFormat)
If bitmap.PixelFormat = Drawing.Imaging.PixelFormat.Format1bppIndexed Or _
bitmap.PixelFormat = Drawing.Imaging.PixelFormat.Format4bppIndexed Or _
bitmap.PixelFormat = Drawing.Imaging.PixelFormat.Format8bppIndexed Or _
bitmap.PixelFormat = Drawing.Imaging.PixelFormat.Undefined Or _
bitmap.PixelFormat = Drawing.Imaging.PixelFormat.DontCare Or _
bitmap.PixelFormat = Drawing.Imaging.PixelFormat.Format16bppArgb1555 Or _
bitmap.PixelFormat = Drawing.Imaging.PixelFormat.Format16bppGrayScale Then
Throw New NotSupportedException("Pixel format of the image is not supported.")
End If
Dim graphicsImage As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(bitmap)
graphicsImage.SmoothingMode = Drawing.Drawing2D.SmoothingMode.HighQuality
graphicsImage.InterpolationMode = Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
graphicsImage.DrawImage(image, 0, 0, bitmap.Width, bitmap.Height)
graphicsImage.Dispose()
Return bitmap
End Function
Vielleicht adressiere ich das Problem falsch, aber grundlegend Allemal versuche ich einen Weg zu finden, wie man Bilder beliebiger Größe in das Crystal Reports BlobField legen kann und sie eine volle A4-Seite aufnehmen lassen.
sehr vielen Dank für Ihre Antwort Dave! Ich endete tatsächlich das Berichtsobjekt, das das Bild stattdessen zeigte, aber ich schätze immer noch, dass Sie eine direkte Antwort auf diese Frage geben :) Ich werde zurück über den Code alle gleich und sehen, wie Ihr tut. Können Sie mir sagen, was mit dem Code, den ich versucht habe, nicht funktioniert? Es hat die msgbox's, die die Auflösung bestätigen, auf die ich die Größe geändert habe, ist das, was ich wollte, aber wenn ich dieses skalierte Blob in den Bericht lege, ist es massiv! – user2101511
Ich suchte lange nach einer Lösung für dieses Problem, delegierte die Aufgabe sogar an meinen Berichtenden und er konnte keine Lösung finden, die nur Crystal Reports verwendete. Also mussten wir uns das oben Gesagte ausdenken, um das Problem zu lösen und es funktioniert super für uns. Wir verwenden jedoch kleine Firmenlogos usw. Nach der Größenanpassung gibt es einen leichten Qualitätsrückgang, und aufgrund unserer Verwendung ist dies keine große Sache. Ihr Kilometerstand kann variieren. –