Hi Friends,
I have to manipulate ( rotate ) a tiff file having 5600 x 6600 pixels. For that I created a pixbuf from file Glib::RefPtr<Gdk::Pixbuf> m_ppixBuf; m_ppixBuf = Gdk::Pixbuf::create_from_file(filename ); int lHeight = m_ppixBuf->get_height(); int lWidth = m_ppixBuf->get_width(); int lRotatedRowStride = m_ppixBuf->get_rowstride(); Then collected data in a local variable, gchar* pixdata = m_ppixBuf->get_pixels(); Allocating equivalent memory to one temporary variable gchar* tmpdata = (char *) malloc( lHeight * lWidth * lNo_of_channels); Then coying pixels one by one from source to target using memcpy function. // case 90 degree : for(j = 0, k = (lHeight-1); j < lHeight; j++, k--) { for(i = 0; i < lWidth; i++) { memcpy(&tmpmap[i * lRotatedRowStride + k * iNo_of_Channel], &bitmap[j * lRowstride + i * iNo_of_Channel], iNo_of_Channel); } } This code works fine , but takes lot of time to rotate large image. Is there any other way to make this operation faster? Also I want to save modified pixbuf in "tiff" file, but GDK library allows me to save only in PNG and JPEG format. How will I save it in tiff format? If anyone knows please help me. Thanks, Ramachandra
|