J'espère que quelqu'un pourra m'aider à fusionner plusieurs grandes images (PNG) en une seule. J'ai jusqu'à 30 images qui sont 20000x2000 et voudrais les fusionner. La sortie est une image qui peut être chargée dans le logiciel SIG.Fusionner de grandes images avec VB.Net
Le problème que je suis est que je suis à court de mémoire après environ la 4ème image.
Le code que j'ai ci-dessous contient essentiellement toute l'image en mémoire comme elle le fait pour l'assemblage. Est-il possible de coudre efficacement les images sans les charger toutes en mémoire, ou d'augmenter la capacité de mémoire et d'utiliser toute ma RAM et/ou ma mémoire virtuelle?
Public Function stitchAllImagesOnXAxis(imageDirectoryPath As String, outputImagePath As String) As Boolean
Try
Dim evolvingImage As Bitmap
Dim filenames() As String = IO.Directory.GetFiles(imageDirectoryPath)
For i As Integer = 0 To filenames.Count - 1
If Not filenames(i).EndsWith(".png") Then filenames = filenames.RemoveAt(i)
Next i
If filenames.Count = 0 Then Return False
Dim FS As New IO.FileStream(filenames(0), IO.FileMode.Open)
evolvingImage = Bitmap.FromStream(FS)
FS.Close()
For i As Integer = 1 To filenames.Count - 1
FS = New IO.FileStream(filenames(i), IO.FileMode.Open)
evolvingImage = stitchImagesOnXAxis(evolvingImage, Bitmap.FromStream(FS), 5)
FS.Close()
Next
evolvingImage.Save(outputImagePath, Imaging.ImageFormat.Png)
evolvingImage.Dispose()
Return True
Catch ex As Exception
Debug.WriteLine(ex.Message)
Return False
End Try
Mon idée de concaténation de blocs IDAT à partir des différents fichiers semble invalide car, si je comprends bien, les morceaux IDAT séparés sont simplement des portions d'un bloc compressé, pas des blocs compressés séparément. –
Oui, j'ai essayé, mais cela a juste fait que le logiciel l'appelle corrompu ou invalide. – Ando
1) Je peux créer des png avec les morceaux IDAT (ou les données à l'intérieur) concaténés sans erreur selon [pngcheck] (http://www.libpng.org/pub/png/apps/pngcheck.html, mais ils le font Avez-vous pensé à mettre à jour le CRC pour l'IHDR après avoir mis à jour la hauteur de l'image? 2) Vous pourriez avoir plus de chance de succès si vous utilisez autre chose que GDI +. –