Я исправил некоторые из ваших ошибок (в основном неправильные размеры). Но он по-прежнему падает на b16bpp.Save()
, потому что GDI + не поддерживает сохранение 16-битных изображений в оттенках серого .
Bitmap b16bpp;
private void GenerateDummy16bitImage()
{
b16bpp = new Bitmap(IMAGE_WIDTH, IMAGE_HEIGHT, System.Drawing.Imaging.PixelFormat.Format16bppGrayScale);
var rect = new Rectangle(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);
var bitmapData = b16bpp.LockBits(rect, ImageLockMode.WriteOnly, b16bpp.PixelFormat);
// Calculate the number of bytes required and allocate them.
var numberOfBytes = bitmapData.Stride * IMAGE_HEIGHT;
var bitmapBytes = new short[IMAGE_WIDTH * IMAGE_HEIGHT];
// Fill the bitmap bytes with random data.
var random = new Random();
for (int x = 0; x < IMAGE_WIDTH; x++)
{
for (int y = 0; y < IMAGE_HEIGHT; y++)
{
var i = ((y * IMAGE_WIDTH) + x); // 16bpp
// Generate the next random pixel color value.
var value = (short)random.Next(5);
bitmapBytes[i] = value; // GRAY
}
}
// Copy the randomized bits to the bitmap pointer.
var ptr = bitmapData.Scan0;
Marshal.Copy(bitmapBytes, 0, ptr, bitmapBytes.Length);
// Unlock the bitmap, we're all done.
b16bpp.UnlockBits(bitmapData);
b16bpp.Save("random.bmp", ImageFormat.Bmp);
Debug.WriteLine("saved");
}
Объяснение моих изменений:
bitmapData.Stride
уже IMAGE_WIDTH * BytesPerPixel
, поэтому вам не нужно умножать на 2 bitmapBytes
как short[]
, он должен иметь размер изображения в пикселях, не входящих в байты i
на 2 Всего вы пытались скопировать массив 8 раз в большую в растровое изображение.
Трудно ответить, не увидев больше кода, однако я считаю, что в MVP вы должны сконфигурировать свои контроллеры представления, используя Configurator
.
class FavouritesConfigurator {
func configureViewController(delegate: FavouritesSceneDelegate?) -> FavouritesViewController {
let viewController = FavouritesViewController()
let presenter = FavouritesPresenter(view: viewController)
presenter.delegate = delegate
viewController.setPresenter(presenter)
return viewController
}
}
Ваш метод запуска координатора должен просто вызвать FavouritesConfigurator
и вернуть ViewController
, настроенный вашим докладчиком и т. Д.
Вы можете использовать возвращаемое значение этого FavouritesConfigurator
для настройки ваших просмотров.
Это просто случай удаления каждой конфигурации представлений от метода запуска и непосредственного вызова этого конфигуратора. Это не нарушает никаких принципов, поскольку ваши компоненты по-прежнему изолированы, проверяемы и вызываются правильно.
Опять же, не видя ваш код, трудно быть точным, но попробуйте это:
let controllers = [FavouritesConfigurator().configureViewController(delegate: self),...,...]
tabBarController.viewControllers = controllers