290 |
290 |
291 if (bitmap) |
291 if (bitmap) |
292 { |
292 { |
293 // create temporary buffer for data |
293 // create temporary buffer for data |
294 RBuf8 buf; |
294 RBuf8 buf; |
295 buf.Create(aRect.Width() * aRect.Height() * 4); |
295 TInt bufCreateErr = buf.Create(aRect.Width() * aRect.Height() * 4); |
|
296 if(bufCreateErr != KErrNone) { |
|
297 buf.Close(); //just in case |
|
298 delete bitmap; |
|
299 bitmap = NULL; |
|
300 return NULL; |
|
301 } |
296 buf.Fill(0xFF); |
302 buf.Fill(0xFF); |
297 |
303 |
298 // read data back from vg (this is sloooww) |
304 // read data back from vg (this is sloooww) |
299 VGint dataStride = 0; |
305 VGint dataStride = 0; |
300 if (aLandscape) |
306 if (aLandscape) |
301 { |
307 { |
302 dataStride = 4 * aRect.Height(); |
308 dataStride = 4 * aRect.Height(); |
303 vgReadPixels((void*)buf.Ptr(), |
309 vgReadPixels((void*)buf.Ptr(), |
304 dataStride, VG_sARGB_8888, 0, 0, aRect.Height(), aRect.Width()); |
310 dataStride, VG_sARGB_8888, 0, 0, aRect.Height(), aRect.Width()); |
305 } |
311 } |
306 else |
312 else |
307 { |
313 { |
308 dataStride = 4 * aRect.Width(); |
314 dataStride = 4 * aRect.Width(); |
309 vgReadPixels((void*)buf.Ptr(), |
315 vgReadPixels((void*)buf.Ptr(), |
310 dataStride, VG_sARGB_8888, 0, 0, aRect.Width(), aRect.Height()); |
316 dataStride, VG_sARGB_8888, 0, 0, aRect.Width(), aRect.Height()); |
311 } |
317 } |
312 |
318 |
313 // because of bug in vg driver we need to swap memory using for loop, because |
319 // because of bug in vg driver we need to swap memory using for loop, because |
314 // negative datastrides cause crash |
320 // negative datastrides cause crash |
315 bitmap->Create(TSize(aRect.Width(), aRect.Height()), EColor16MA); |
321 TInt bitmapCreateErr = bitmap->Create(TSize(aRect.Width(), aRect.Height()), EColor16MA); |
|
322 if(bitmapCreateErr != KErrNone) { |
|
323 buf.Close(); |
|
324 delete bitmap; |
|
325 bitmap = NULL; |
|
326 return NULL; |
|
327 } |
|
328 |
316 bitmap->BeginDataAccess(); |
329 bitmap->BeginDataAccess(); |
317 if (!aLandscape) |
330 if (!aLandscape) |
318 { |
331 { |
319 TUint8* ptrTrg = (TUint8*)bitmap->DataAddress(); |
332 TUint8* ptrTrg = (TUint8*)bitmap->DataAddress(); |
320 TUint8* ptrSrc = (TUint8*)buf.Ptr(); |
333 TUint8* ptrSrc = (TUint8*)buf.Ptr(); |