У меня есть изображение ImageMagick ++, которое я хотел бы масштабировать до любой ширины и высоты, которые мне нравятся, а затем я хотел бы получить доступ к пикселам этого нового масштабированного изображения.Как постоянно масштабировать изображение ImageMagick ++ на Ubuntu?
Я хочу, чтобы операция масштабирования постоянно изменяла изображение. До сих пор существует четыре метода ImageMagick ++, которые звучат так, как будто они могут достичь этой операции масштабирования: resize(), sample(), scale() и transform(), но единственная, с которой я могу почти работать, - sample().
Проблема заключается в том, что когда я вызываю tMyImage.sample(), а затем читаю значения пикселей, изображение масштабируется только до высоты, которую я передаю ему, а затем ширина устанавливается в соответствии с исходным соотношением сторон.
Вот код, я использую:
Magick::Image tMyIMage(iOriginalWidth, iOriginalHeight, "BGRA", Magick::CharPixel, (void *)pSourceData);
try { tImage.sample(Magick::Geometry(200, 50, 0, 0)); }
catch { Magick::Exception &eException)
{
// This never happens...
}
tImage.modifyImage();
size_t nNewWidth = tImage.columns();
size_t nNewHeight = tImage.rows();
// At this point I would expect that nNewWidth is 200 and nNewHeight is 50
// Instead, nNewHeight is 50 but nNewWidth is scaled according to the original aspect ratio
// Note here that tImage.baseColumns() and tImage.baseRows() both return 0
tImage.type(Magick::TrueColorType);
const Magick::PixelPacket *pPixels = tImage.getConstPixels(0, 0, nNewWidth, nNewHeight);
// Here I would expect that pPixels points to pixel data of a 200x50 pixel image
Я новичок в ImageMagick ++, поэтому я уверен, что я должен делать что-то неправильно. Любая помощь очень ценится! Благодаря!
' tImage' width & height вернет 0, так как вы импортировали пиксели в 'tMyIMage'. – emcconville