L'errore generico GDI + durante il salvataggio di una bitmap è ovviamente un problema comune secondo la mia ricerca qui su SO e sul Web. Dato seguente frammento semplificata:Errore generico GDI + salvataggio bitmap creato dalla memoria utilizzando LockBits
byte[] bytes = new byte[2048 * 2048 * 2];
for (int i = 0; i < bytes.Length; i++)
{
// set random or constant pixel data, whatever you want
}
Bitmap bmp = new Bitmap(2048, 2048, PixelFormat.Format16bppGrayScale);
BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, 2048, 2048), ImageLockMode.ReadWrite, bmp.PixelFormat);
System.Runtime.InteropServices.Marshal.Copy(bytes, 0, bmpData.Scan0, 8388608);
bmp.UnlockBits(bmpData);
bmp.Save(@"name.bmp");
Ciò genera l'errore 0x80004005 generica. Il solito motivo per questo si dice che sia un blocco sui componenti, ma non vedo nulla qui. Sono solo cieco? Il percorso che sto salvando esiste, ovviamente, viene creato solo un file bmp vuoto (0B).
Sfondo: Ricevo i dati dei pixel da un driver della fotocamera che trasferisco su .NET utilizzando un wrapper C++/CLI, pertanto l'oggetto Bitmap sopra riportato viene restituito da una chiamata di funzione. Ma dal momento che questo piccolo esempio non funziona, suppongo che non ci sia nulla di sbagliato nell'adattatore.
Qualsiasi suggerimento è molto apprezzato!
La scala di grigi a 16 bit non è un formato bmp valido? –
Non l'ho considerato, a dire il vero. Passando a 8bpp indicizzati, il file è stato creato senza errori. L'obiettivo finale è salvare l'immagine 16bpp in scala di grigi come PNG, ma sostituendo il precedente con 'bmp.Save (@" name.bmp ", ImageFormat.Png);' non ha funzionato neanche. – simd
Hai provato a specificare ImageFormat.Bmp quando salvi? Vedere questa risposta: http://social.msdn.microsoft.com/Forums/vstudio/en-US/10252c05-c4b6-49dc-b2a3-4c1396e2c3ab/action?threadDisplayName=writing-a-16bit-grayscale-image – Ben