bool wxBitmapDataObject::SetData(size_t size, const void *buf) { Clear(); #if wxUSE_LIBPNG m_pngSize = size; m_pngData = malloc(m_pngSize); memcpy( m_pngData, buf, m_pngSize ); wxMemoryInputStream mstream( (char*) m_pngData, m_pngSize ); wxImage image; wxPNGHandler handler; if ( !handler.LoadFile( &image, mstream ) ) { return false; } m_bitmap = image; return m_bitmap.IsOk(); #else return false; #endif }
static void test_buffer(skiatest::Reporter* reporter) { SkRandom rand; SkAutoMalloc am(MAX_SIZE * 2); char* storage = (char*)am.get(); char* storage2 = storage + MAX_SIZE; random_fill(rand, storage, MAX_SIZE); for (int sizeTimes = 0; sizeTimes < 100; sizeTimes++) { int size = rand.nextU() % MAX_SIZE; if (size == 0) { size = MAX_SIZE; } for (int times = 0; times < 100; times++) { int bufferSize = 1 + (rand.nextU() & 0xFFFF); SkMemoryStream mstream(storage, size); SkBufferStream bstream(&mstream, bufferSize); int bytesRead = 0; while (bytesRead < size) { int s = 17 + (rand.nextU() & 0xFFFF); int ss = bstream.read(storage2, s); REPORTER_ASSERT(reporter, ss > 0 && ss <= s); REPORTER_ASSERT(reporter, bytesRead + ss <= size); REPORTER_ASSERT(reporter, memcmp(storage + bytesRead, storage2, ss) == 0); bytesRead += ss; } REPORTER_ASSERT(reporter, bytesRead == size); } } }
JsonDocument JsonParseBytes(const char* _bytes, size_t _length, const char** _error, size_t* _errorOffset) { JsonDocument document; rapidjson::MemoryStream mstream(_bytes, _length); rapidjson::EncodedInputStream<rapidjson::UTF8<char>, rapidjson::MemoryStream> istream(mstream); document.ParseStream(istream); *_error = nullptr; *_errorOffset = 0; if (document.HasParseError()) { *_error = rapidjson::GetParseError_En(document.GetParseError()); *_errorOffset = document.GetErrorOffset(); } return document; }
void wxBitmapDataObject::DoConvertToPng() { #if wxUSE_LIBPNG if (!m_bitmap.IsOk()) return; wxImage image = m_bitmap.ConvertToImage(); wxPNGHandler handler; wxCountingOutputStream count; handler.SaveFile( &image, count ); m_pngSize = count.GetSize() + 100; // sometimes the size seems to vary ??? m_pngData = malloc(m_pngSize); wxMemoryOutputStream mstream( (char*) m_pngData, m_pngSize ); handler.SaveFile( &image, mstream ); #endif }