سؤال

أحاول توليدها ImageMagick الصور من SDL بيانات بكسل. إليك ما يبدو عليه GIF حتى الآن. (هذا GIF أبطأ من الحرف أدناه عن قصد.)

http://www.starlon.net/images/combo.gif

إليك ما يفترض أن يبدو عليه. لاحظ في الصورة أعلاه أن البيكسلات يبدو أنها تراكب على رأس وحدات البكسل الأخرى.

http://www.starlon.net/images/combo2.gif

هنا حيث يتم إنشاء GIF بالفعل.

void DrvSDL::WriteGif() {
    std::list<Magick::Image> gif;

    for(std::list<Magick::Blob>::iterator it = image_.begin(); it != image_.end(); it++) {
        Magick::Geometry geo(cols_ * pixels.x, rows_ * pixels.y);
        Magick::Image image(*it, geo, 32, "RGB");
        gif.push_back(image);
        LCDError("image");
    }
    for_each(gif.begin(), gif.end(), Magick::animationDelayImage(ani_speed_));
    Magick::writeImages(gif.begin(), gif.end(), gif_file_);
}

وإليك حيث يتم تعبئة النقطة.

image_.push_back(Magick::Blob(surface_->pixels, rows_ * pixels.y * surface_->pitch));

وإليك كيفية تهيئة سطح SDL.

surface_ = SDL_SetVideoMode(cols_ * pixels.x, rows_ * pixels.y, 32, SDL_SWSURFACE);
هل كانت مفيدة؟

المحلول

عادة ما يكون ذلك الصورة العليا بسبب عازلة غير محسوبة. من المحتمل ألا يكون المخزن المؤقت SDL محاذاة و ImageMagick تتوقع الإجراءات أن يتم محاذاة المخزن المؤقت على DWORD. هذا أمر شائع جدًا في معالجة صورة نقطية. مكتبة معالجة الصور الشائعة - تتطلب LeadTools ، عادةً ، بيانات محاذاة DWORD. هذا هو في الغالب مع أحادي اللون ولون 32 بت ولكن يمكن أن يكون هو الحال لأي عمق لون.

ما عليك القيام به هو كتابة صورة نقطية محاذاة من المخزن المؤقت SDL الخاص بك أو على الأقل إنشاء مخزن مؤقت محاذاة dword.

قد تكون وثائق ImageMagick API قادرة على المساعدة في توضيح ذلك بشكل أكبر.

نصائح أخرى

شيء آخر قد ترغب في تجربته هو مسح المخازن المؤقتة للتأكد من عدم وجود أي بيانات موجودة بالفعل. لا أعرف حقًا واجهة برمجة تطبيقات IM ، لكن البكسلات المتراكبة فوق وحدات البكسل الأخرى تشير عادة إلى المخزن المؤقت القذر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top