سؤال

باستخدام Java and JNA اتصل ب Fonction: تتبع (Potrace_ Bitmap_s)

struct potrace_bitmap_s { 
int w, h; 
int dy; /* scanline offset in words */
potrace_word *map; /* pixel data, dy*h words */
};
typedef struct potrace_bitmap_s potrace_bitmap_t;

W، H: هي عرض وارتفاع صورة نقطية

في وثيقة المكتبة وجدت هذا

هنا، Potrace_word هو نوع عدد صحيح غير موقعة محددة في Potracelib.h. عادة ما تكون مساوية لكلمة آلة أصلية (أي 32 بت على بنية 32 بت). في التفسير التالي، نفترض أن نوع POTRACE_WORD HOLDS N بت.

صورة نقطية من الأبعاد W * H منقسم، في الأسفل إلى الأعلى، إلى Scanlines H أفقي. يتم تقسيم كل عملية فحص، من اليمين، إلى كتل من البكسلات N. يتم تخزين كل كتلة من N Pixels ككلمة واحدة من POTRACE_WORD، مع وجود بكسل أقصى اليسار من الكتلة المقابلة لأهم القليل من الكلمة، والبكسل أقصى اليمين من الكتلة المقابلة إلى الأقل أهمية كبيرة من الكلمة. يتم تمثيل البكسلات التي هي "على" (أو أسود "أو" مقدمة ") قيمة بت 1. بكسلات" قبالة "(من" اللون الأبيض "أو" الخلفية ") ممثلة ذات قيمة بت 0. إذا كان عدد البتات في SCASLLINE غير قابلة للقسمة بواسطة N، ثم يتم تبريد الكلمات الموجودة في أقصى اليمين في SCANLINE على اليمين مع الأصفار. تبدأ بيانات SCANLINE 0 (الجزء السفلي - معظم المسح الضوئي) في الخريطة [0]. تبدأ بيانات SCANLINE 1 في الخريطة [DY]. تبدأ بيانات SCANLINE 2 في الخريطة [2 * DY] وما إلى ذلك. لاحظ أن DY يمكن أن يكون إما إيجابيا أو سلبيا، اعتمادا على كيفية رغبة التطبيق في وضع بيانات الصورة في الذاكرة.

لكنني لم أفهم كيف يمكنني تمثيل في خريطة جافا.

public class Potrace_bitmap_t extends Structure{
    int w, h; /* width and height, in pixels */
    int dy; /* scanline offset in words */
    map ??; /* pixel data, dy*h words */
}
هل كانت مفيدة؟

المحلول

هذه طريقة قياسية جميلة لتخزين صورة ملونة ملونة، مثل ما تحصل عليه من TIFF المشفرة من الفاكس. من المفترض أن تكون "الخريطة" مجموعة من أعداد صحيحة 32 بت غير موقعة. لا أعتقد أن Java يتيح لك إعلان UINT32، لكنه لا يهم حقا في هذه الحالة، لأن كل ما تهتم به هو البتات.

أعلن "خريطة" كصفيف من الأعداد الصحيحة. لجعل هذا في صورة، يمكنك فحص البتات في الصفيف واحد في وقت واحد. إذا كان بعض الشيء 0 (أفترض آلة إنتل) من الأول الأول في الصفيف هو "1"، ثم يجب ضبط بكسل في الركن الأيسر السفلي من الصورة على الأسود. إذا كان "0"، فقم بتعيين البكسل إلى الأبيض. كل int سوف تعطيك 32 بكسل. إذا لم يكن عرض الصورة قابل للقسمة بنسبة 32، فستحتاج إلى تخطي الأمام. هذا هو ما "الخريطة [2 * DY] يخبرك.

لذلك، إذا كان عرض الصورة 55 على سبيل المثال، قمت بتعيين 32 بكسل مع خريطة [0]، ثم قم بتعيين 23 بكسل مع خريطة [1]، ثم ابدأ بالسطر التالي للصورة (واحد بجانب الأسفل) في القليل من الخريطة [2]. (DY للحصول على صورة 55 بكسل واسعة سيكون 2، على افتراض أعداد صحيحة 32 بت)

قم بذلك في حلقة، أسفل الصورة إلى قيمة الارتفاع.

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