تضامنًا مع حق الشعب الفلسطيني |
ملف:Antialiased lanczos.png
من أرابيكا، الموسوعة الحرة
اذهب إلى التنقل
اذهب إلى البحث
Antialiased_lanczos.png (128 × 128 بكسل حجم الملف: 9 كيلوبايت، نوع MIME: image/png)
![]() | هذا ملف من ويكيميديا كومنز. معلومات من صفحة وصفه مبينة في الأسفل. كومنز مستودع ملفات ميديا ذو رخصة حرة. |
محتويات
ملخص
الوصفAntialiased lanczos.png |
English: Antialiased chessboard using the Lanczos algorithm, made by myself based on the source in File:Antialiased.png's description. This one should be relatively close to an ideal filter, primarily because I used a lot of taps (several million) for the more problematic pixels. |
التاريخ | ٢٣ ديسمبر ٢٠٠٨ (تاريخ الرفع الأصيل) |
المصدر | نُقِلت من en.wikipedia إلى كُومُنز . |
المؤلف | Sesse في ويكيبيديا الإنجليزية |
ترخيص
Public domainPublic domainfalsefalse |
![]() |
وضع -Sesse في ويكيبيديا الإنجليزية-، وهو المؤلف، هذا العمل في النِّطاق العامِّ. يسري ذلك في كل أرجاء العالم. في بعض البلدان، قد يكون هذا التَّرخيص غيرَ مُمكنٍ قانونيَّاً، في هذه الحالة: يمنح Sesse الجميع حق استخدام هذا العمل لأي غرض دون أي شرط ما لم يفرض القانون شروطًا إضافية.Public domainPublic domainfalsefalse |
Source
Here's the source I used, written by myself. The choice of 16384x16384 might have been overkill; I cannot spot any significant differences between this and using 1024x1024 taps all over the image. The generation took about an hour on one core of an Intel Q9450.
Compile and link with
gcc -O3 -o antialias antialias.c -lm -std=gnu99
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/*
* Do a finer sampling the higher up we get in the picture,
* since there's much more detail there.
*/
#define SAMPLES_FROM_Y(y) ((16384 * 512) / (y*y + 512))
#define MAX_SAMPLES SAMPLES_FROM_Y(0)
float weights[MAX_SAMPLES][MAX_SAMPLES];
static inline int color(double x, double y)
{
double t, z;
int i, j, k;
x = x * (1.0 / 128.0) - 0.5;
y = y * (1.0 / 2048.0);
t = 1.0 / (y + 0.001);
z = t * x;
i = floor(t);
j = floor(z);
k = i + j;
return ((k % 2) != 0);
}
static double sinc(double x)
{
static const double cutoff = 1.220703668e-4; /* sqrt(sqrt(eps)) */
if (abs(x) < cutoff) {
/* For small |x|, use Taylor series instead */
const double x2 = x * x;
const double x4 = x2 * x2;
return 1.0 - x2 / 6.0 + x4 / 120.0;
} else {
return sin(x) / x;
}
}
static double lanczos_tap(double x)
{
if (x < -3.0 || x > 3.0)
return 0.0;
if (x < 0.0)
return sinc(-x*M_PI) * sinc(-x*M_PI / 3.0);
else
return sinc(x*M_PI) * sinc(x*M_PI / 3.0);
}
static void precalculate_weights(unsigned num_samples)
{
double total = 0.0;
for (int yi = 0; yi < num_samples; ++yi) {
double sy = 6.0 * ((double)yi / num_samples - 0.5);
double wy = lanczos_tap(sy);
for (int xi = 0; xi < num_samples; ++xi) {
double sx = 6.0 * ((double)xi / num_samples - 0.5);
weights[yi][xi] = wy * lanczos_tap(sx);
total += weights[yi][xi];
}
}
double inv_total = 1.0 / total;
for (int yi = 0; yi < num_samples; ++yi) {
for (int xi = 0; xi < num_samples; ++xi) {
weights[yi][xi] *= inv_total;
}
}
}
static double antialiased_color(double x, double y, unsigned num_samples)
{
double acc = 0.0;
double delta = 6.0 / num_samples;
int xi, yi;
double sx, sy;
for (yi = 0, sy = y - 3.0; yi < num_samples; ++yi, sy += delta) {
for (xi = 0, sx = x - 3.0; xi < num_samples; ++xi, sx += delta) {
if (color(sx, sy)) {
acc += weights[yi][xi];
}
}
}
return acc;
}
سجلُّ الرَّفع الأصيل
صفحة الوصف الأصلية كانت هنا، تشير جميع أسماء المستخدمين التالية إلى en.wikipedia.
زمن/تاريخ | الأبعاد | مستخدم | تعليق |
---|---|---|---|
2011-03-19 16:41 | 128×128× (11220 bytes) | Dicklyon | compromise, since for many displays it goes too far to do full sRGB gamma hack |
2010-09-23 03:06 | 128×128× (14944 bytes) | Ancient Anomaly | Aactually it was still too dark. This one should be correct. |
2010-09-23 03:03 | 128×128× (11220 bytes) | Ancient Anomaly | Reverted to version as of 09:07, 23 December 2009 #808080 is NOT halfway between black and white, sRGB is not linear |
2010-07-20 12:48 | 128×128× (10284 bytes) | Technion | Reverted to version as of 14:27, 23 December 2008: Revert to original image by Sesse. In original image, gray at top of image is #808080, halfway between black and white as would be expected; in Dicklyon’s modified version, gray at top is much lighter t |
2009-12-23 09:07 | 128×128× (11220 bytes) | Dicklyon | Adjust tone scale, since no gamma correction was applied when the image was created.\ |
2008-12-23 14:27 | 128×128× (10284 bytes) | Sesse | Antialiased chessboard using the Lanczos algorithm, made by myself based on the source in [[File:Antialiased.png]]'s description. This one should be relatively close to an ideal filter, primarily because I used a lot of taps (several million) for the more |
الشروحات
أضف شرحاً من سطر واحد لما يُمثِّله هذا الملف
العناصر المصورة في هذا الملف
يُصوِّر
٢٣ ديسمبر 2008
image/png
a6bba7e45908e78e31ae17e50a83f1b586d736e8
٨٬٨٢٩ بايت
١٢٨ بكسل
١٢٨ بكسل
تاريخ الملف
اضغط على زمن/تاريخ لرؤية الملف كما بدا في هذا الزمن.
زمن/تاريخ | صورة مصغرة | الأبعاد | مستخدم | تعليق | |
---|---|---|---|---|---|
حالي | 13:51، 17 مايو 2023 | ![]() | 128 × 128 (9 كيلوبايت) | commonswiki>Phreneticc | Reduced file weight with FileOptimizer in lossless compression mode. |
استخدام الملف
ال1 ملف التالي مكررات لهذا الملف (المزيد من التفاصيل):
- ملف:Antialiased lanczos.png من ويكيميديا كومنز
الصفحة التالية تستخدم هذا الملف:
مجلوبة من «https://3rabica.org/ملف:Antialiased_lanczos.png»