У меня странная проблема - если я запускаю свое приложение на своем рабочем столе, x86 Windows7 - это нормально, но когда я пытаюсь запустить его на Windows Server 2008 x64 - у меня появляется индекс из-за исключительной ситуации.В моем приложении я читал байты изображений, изменяя их с помощью указателей и т. Д.
Пробная сборка для других платформ (x86, x64, Any CPU) - не помогло.
Какое может быть решение для этого?
Редактировать:
Эта функция делает исключение:
private static unsafe Bitmap LoadStatic(Stream stream)
{
BinaryReader bin = new BinaryReader(stream);
bin.ReadInt32();
int width = bin.ReadInt16();
int height = bin.ReadInt16();
if (width <= 0 || height <= 0)
return null;
int[] lookups = new int[height];
int start = (int)bin.BaseStream.Position + (height * 2);
for (int i = 0; i < height; ++i)
lookups[i] = (int)(start + (bin.ReadUInt16() * 2));
Bitmap bmp = new Bitmap(width, height, PixelFormat.Format16bppArgb1555);
BitmapData bd = bmp.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, PixelFormat.Format16bppArgb1555);
ushort* line = (ushort*)bd.Scan0;
int delta = bd.Stride >> 1;
for (int y = 0; y < height; ++y, line += delta)
{
bin.BaseStream.Seek(lookups[y], SeekOrigin.Begin);
ushort* cur = line;
ushort* end;
int xOffset, xRun;
while (((xOffset = bin.ReadUInt16()) + (xRun = bin.ReadUInt16())) != 0)
{
cur += xOffset;
end = cur + xRun;
while (cur < end)
*cur++ = (ushort)(bin.ReadUInt16() ^ 0x8000);
}
}
bmp.UnlockBits(bd);
return bmp;
}