BitmapWrapperD2D::BitmapWrapperD2D(bitmap bmp) { IWICBitmap* wic = 0; Graphics::locator.getfactory()->CreateBitmapFromMemory( bmp.width(), bmp.height(), GUID_WICPixelFormat32bppBGRA, 4 * bmp.width(), bmp.length(), (BYTE*)bmp.data(), &wic); if (wic != 0) { IWICFormatConverter* converter = nullptr; IWICBitmap* temp = nullptr; int result = Graphics::locator.getfactory()->CreateFormatConverter(&converter); if (result == 0) { converter->Initialize(wic, GUID_WICPixelFormat32bppPBGRA, WICBitmapDitherTypeNone, 0, 0.f, WICBitmapPaletteTypeMedianCut); Graphics::locator.getfactory()->CreateBitmapFromSource(converter, WICBitmapNoCache, &temp); converter->Release(); } wic->Release(); ID2D1BitmapRenderTarget* target = Graphics::locator.gettarget(); if (target) { target->CreateBitmapFromWicBitmap(temp, &source); temp->Release(); temp = nullptr; } else { source = nullptr; } } else { source = nullptr; } }
pair<imgcontext, size_t> imagecache::createimage(bitmap bmp) { size_t id = bmp.id(); if (temp[imgcon][id] || cache[imgcon][id]) { return make_pair(imgcon, id); } else { IWICBitmap* wic = 0; imgfactory->CreateBitmapFromMemory( bmp.width(), bmp.height(), GUID_WICPixelFormat32bppBGRA, 4 * bmp.width(), bmp.length(), (BYTE*)bmp.data(), &wic); if (wic) { IWICFormatConverter* spConverter = 0; int result = imgfactory->CreateFormatConverter(&spConverter); if (result == 0) { spConverter->Initialize(wic, GUID_WICPixelFormat32bppPBGRA, WICBitmapDitherTypeNone, NULL, 0.f, WICBitmapPaletteTypeMedianCut); imgfactory->CreateBitmapFromSource(spConverter, WICBitmapNoCache, &temp[imgcon][id]); spConverter->Release(); } wic->Release(); } } return make_pair(imgcon, id); }
bitmap< T > module< T >::apply_raster(bitmap< T > const& image)const{ bitmap< T > result( (image.width() - 1) / param.raster + 1, (image.height() - 1) / param.raster + 1 ); for(std::size_t y = 0; y < result.height(); ++y){ for(std::size_t x = 0; x < result.width(); ++x){ result(x, y) = image(x * param.raster, y * param.raster); } } return result; }
void addbitmap(const bitmap& bmp) { size_t id = bmp.id(); if (available(id)) return; glGenTextures(1, &bitmaps[id]); glBindTexture(GL_TEXTURE_2D, bitmaps[id]); glTexImage2D(GL_TEXTURE_2D, 0, GL_BGRA, bmp.width(), bmp.height(), 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, bmp.data()); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); }