// ***** BMHD erzeugen **** public byte[] GenerateBMHD() { byte[] bmhdHeaderData = new byte[28]; // BMHD Werte initialisieren byte[] bmhdType = System.Text.Encoding.ASCII.GetBytes("BMHD"); ushort uWordBreite = (ushort)bitmapWidth; ushort uWordHoehe = (ushort)bitmapHeight; ushort wordX = (ushort)xOffset; ushort wordY = (ushort)yOffset; byte tiefe = (byte)bildTiefe; byte maske = (byte)intMaske; byte komorimiert = (byte)kompresion; ushort transcolor = (ushort)transparent; byte xAspect = (byte)xAspekt; byte yAspect = (byte)yAspekt; ushort wordBreite = (ushort)xScreen; ushort wordHoehe = (ushort)yScreen; Debug.WriteLine($"\nxScreen: 0x{wordBreite:X4}"); Debug.WriteLine($"yScreen: 0x{wordHoehe:X4}\n"); // Debug-Ausgabe vor der Umkehrung Debug.WriteLine($"\nOriginal uWordBreite: 0x{uWordBreite:X4}"); Debug.WriteLine($"\nOriginal uWordHoehe: 0x{uWordHoehe:X4}"); // Byte umkehren - Endianness uWordBreite = ReverseBytes(uWordBreite); uWordHoehe = ReverseBytes(uWordHoehe); wordX = ReverseBytes(wordX); wordY = ReverseBytes(wordY); transcolor = ReverseBytes(transcolor); wordBreite = ReverseBytes(wordBreite); wordHoehe = ReverseBytes(wordHoehe); Debug.WriteLine($"\nReversed EuWordBreite: 0x{uWordBreite:X4}"); Debug.WriteLine($"nReversed uWordHoehe: 0x{uWordHoehe:X4}"); // BMHD schreiben Array.Copy(bmhdType, 0, bmhdHeaderData, 0, bmhdType.Length); bmhdHeaderData[4] = 0; // leeres Byte (Padding) bmhdHeaderData[5] = 0; // leeres Byte (Padding) bmhdHeaderData[6] = 0; // leeres Byte (Padding) BitConverter.GetBytes(uWordBreite).CopyTo(bmhdHeaderData, 7); BitConverter.GetBytes(uWordHoehe).CopyTo(bmhdHeaderData, 9); BitConverter.GetBytes(wordX).CopyTo(bmhdHeaderData, 11); BitConverter.GetBytes(wordY).CopyTo(bmhdHeaderData, 13); bmhdHeaderData[15] = 0; // leeres Byte (Padding) bmhdHeaderData[16] = tiefe; bmhdHeaderData[17] = maske; bmhdHeaderData[18] = komorimiert; bmhdHeaderData[19] = 0; // leeres Byte (Padding) BitConverter.GetBytes(transcolor).CopyTo(bmhdHeaderData, 20); bmhdHeaderData[22] = xAspect; bmhdHeaderData[23] = yAspect; BitConverter.GetBytes(wordBreite).CopyTo(bmhdHeaderData, 24); BitConverter.GetBytes(wordHoehe).CopyTo(bmhdHeaderData, 26); Debug.WriteLine($"\n\nBMHD Type: {bmhdType}"); Debug.WriteLine($"Breite: 0x{uWordBreite:X4}"); Debug.WriteLine($"Höhe: 0x{uWordHoehe:X4}"); Debug.WriteLine($"xVersatz: 0x{wordX:X4}"); Debug.WriteLine($"yVersatz: 0x{wordY:X4}"); Debug.WriteLine($"Farbtiefe: 0x{tiefe:X2}"); Debug.WriteLine($"Maske: 0x{maske:X2}"); Debug.WriteLine($"Kompresion: 0x{komorimiert:X2}"); Debug.WriteLine($"Transcolor: 0x{transcolor:X4}"); Debug.WriteLine($"xAspect: 0x{xAspect:X2}"); Debug.WriteLine($"yAspect: 0x{yAspect:X2}"); Debug.WriteLine($"xScreen: 0x{wordBreite:X4}"); Debug.WriteLine($"yScreen: 0x{wordHoehe:X4}"); // BMHD in bmhdHeader speichern und zurück geben. return bmhdHeaderData; } // Byte umkehren private ushort ReverseBytes(ushort value) { return (ushort)((value >> 8) | ((value & 0xFF) << 8)); } // Speichern der Datei private void SaveFile(byte[] ilbm) { SaveFileDialog saveFileDialog = new SaveFileDialog { FileName = "output.iff", DefaultExt = "iff", Filter = "IFF files (.iff)|*.iff" }; if (saveFileDialog.ShowDialog() == true) { try { // Debug-Ausgaben vor dem Speichern Debug.WriteLine($"\n\nILBM Header Data:"); for (int i = 0; i < ilbm.Length; i++) { Debug.WriteLine($"Byte {i}: 0x{ilbm[i]:X2}"); } // Datei speichern System.IO.File.WriteAllBytes(saveFileDialog.FileName, ilbm); } catch (Exception ex) { } } }