سؤال

أحتاج إلى توليد الصور المصغرة لمجموعة من صور jpeg (200000+) ولكني أريد التأكد من أن جميع إبهامي لها نفس الارتفاع والعرض.ومع ذلك، لا أريد تغيير نسب الصورة، لذا أحتاج إلى إضافة مساحة فارغة إلى البعد الأقصر "لتربيعه".لون خلفية المساحة الفارغة متغير.

إليك مقتطف الكود الذي أستخدمه لإنشاء الإبهام.ما هي أفضل طريقة للقيام بالتربيع؟

     Dim imgDest As System.Drawing.Bitmap = New Bitmap(ScaleWidth, ScaleHeight)
     imgDest.SetResolution(TARGET_RESOLUTION, TARGET_RESOLUTION)  
     Dim grDest As Graphics = Graphics.FromImage(imgDest)

     grDest.DrawImage(SourceImage, 0, 0, imgDest.Width, imgDest.Height)
هل كانت مفيدة؟

المحلول

وماذا عن هذا. ربما يجب عليك رسم أسود (أو أي لون) مستطيل على نقطية أولا.

وبعد ذلك عند وضع صورة تم تغيير حجمها، وحساب فقط وضع الصورة على أساس أيهما البعد أقصر، ومن ثم نقل هذا البعد من نصف الفرق (والحفاظ على البعض على 0).

لا أن العمل؟

نصائح أخرى

يحب فايبهاف قال، قم أولاً بطلاء منطقة الإبهام بأكملها باللون الأسود.سيكون هذا أسهل من تركيب الصورة في الصورة المصغرة أولاً ثم تحديد المستطيلات التي تريد طلاءها باللون الأسود لتحقيقها ملاكمة أو com.letterboxing.

رمز زائف لحل عام يناسب imageWidth س imageHeight الصورة في thumbWidth س thumbHeight (ليس من الضروري أن تكون مربعة):

imageRatio = imageWidth / imageHeight;
thumbRatio = thumbWidth / thumbHeight;

zoomFactor = imageRatio >= thumbRatio
    ? thumbWidth / imageWidth 
    : thumbHeight / imageHeight;

destWidth = imageWidth * zoomFactor;
destHeight = imageHeight * zoomFactor;

drawImage(
    (thumbWidth - destWidth) >> 1,
    (thumbHeight - destHeight) >> 1,
    destWidth,
    destHeight);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top