ich programmiere gerade ein tool, das zwei bilder in eine große bitmap untereinander packt (siehe anhang: bild1). ahnung hab ich wenig, aber ich gebe mein bestes
hier ist der code:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74:
| BitmapData Bild1Data = Bild1.LockBits(new Rectangle(0, 0, Bild1.Width, Bild1.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb); int Bild1Stride = Bild1Data.Stride; System.IntPtr Bild1Scan0 = Bild1Data.Scan0;
BitmapData Bild2Data = Bild2.LockBits(new Rectangle(0, 0, Bild2.Width, Bild2.Height), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb); int Bild2Stride = Bild2Data.Stride; System.IntPtr Bild2Scan0 = Bild2Data.Scan0;
BitmapData NeuesBildData = NeuesBild.LockBits(new Rectangle(0, 0, NeuesBild.Width, NeuesBild.Height), ImageLockMode.WriteOnly, PixelFormat.Format24bppRgb); int NeuesBildStride = NeuesBildData.Stride; System.IntPtr NeuesBildScan0 = NeuesBildData.Scan0;
unsafe { byte* Bild1p = (byte*)(void*)Bild1Scan0; int Bild1nOffset = Bild1Stride - Bild1.Width * 3; byte* Bild2p = (byte*)(void*)Bild2Scan0; int Bild2nOffset = Bild2Stride - Bild2.Width * 3; byte* NeuesBildp = (byte*)(void*)NeuesBildScan0; int NeuesBildnOffset = NeuesBildStride - NeuesBild.Width * 3;
bool Bild1Zaehlen = true; bool Bild2Zaehlen = false;
for (int y = 0; y < NeuesBild.Height; y++) { for (int x = 0; x < NeuesBild.Width; x++) { if ((y < Bild1.Height) && (x < Bild1.Width)) { Bild1Zaehlen = true; Bild2Zaehlen = false; NeuesBildp[0] = Bild1p[0]; NeuesBildp[1] = Bild1p[1]; NeuesBildp[2] = Bild1p[2]; } else if ((y >= Bild1.Height) && (x < Bild2.Width)) { Bild1Zaehlen = false; Bild2Zaehlen = true; NeuesBildp[0] = Bild2p[0]; NeuesBildp[1] = Bild2p[1]; NeuesBildp[2] = Bild2p[2]; } else { Bild1Zaehlen = false; Bild2Zaehlen = false; NeuesBildp[0] = 255; NeuesBildp[1] = 255; NeuesBildp[2] = 255; }
if (Bild1Zaehlen) Bild1p += 3; if (Bild2Zaehlen) Bild2p += 3; NeuesBildp += 3; }
if (Bild1Zaehlen) Bild1p += Bild1nOffset; if (Bild2Zaehlen) Bild2p += Bild2nOffset; NeuesBildp += NeuesBildnOffset; }
Bild1.UnlockBits(Bild1Data); Bild2.UnlockBits(Bild2Data); NeuesBild.UnlockBits(NeuesBildData);
} |
das problem ist folgendes:
sobald nur ein bild von beiden hochkant ist und das andere längs, wird das hochkante verzerrt. pro reihe ist immer ein pixel schwarz und das ganze schiebt sich vor (anhang bild2). bei anderen bildern funktionierts. weiß jemand rat? ich vermute ja, dass es an den if-bedingungen liegt, kann mir aber nichts genaues vorstellen.
vielen dank für jede hilfe,
mareike