Java имеет пул строк, в котором Java управляет распределением памяти для объектов String. См. String Pools в Java
Когда вы проверяете (сравниваете) два объекта с помощью оператора ==
, он сравнивает равенство адресов в пуле строк. Если два объекта String имеют одинаковые адреса, то он возвращает true
, в противном случае false
. Но если вы хотите сравнить содержимое двух объектов String, вы должны переопределить метод equals
.
equals
- фактически метод класса Object, но он переопределяется в класс String и дается новое определение, которое сравнивает содержимое объекта.
Example:
stringObjectOne.equals(stringObjectTwo);
Но помните, что это относится к случаю String. Если вы хотите сравнить регистр без учета регистра, вы должны пойти для метода equalsIgnoreCase класса String.
Давайте посмотрим:
String one = "HELLO";
String two = "HELLO";
String three = new String("HELLO");
String four = "hello";
one == two; // TRUE
one == three; // FALSE
one == four; // FALSE
one.equals(two); // TRUE
one.equals(three); // TRUE
one.equals(four); // FALSE
one.equalsIgnoreCase(four); // TRUE
Нет никакого "простого" способа acommplish этого. И масштабирование и вращение не "тривиальный" про-Цезис.
Google это для 2-й библиотеки обработки изображений. Magick ++ может быть идеей как divideandconquer.se точки, но существуют другие.
Дублирование или отбрасывание пикселей не являются лучшим изменением размеров метода или изображения, поскольку результаты покажут растрирование и зубчатость. Для лучших результатов Вы должны передискретизировать изображение, которое даст получающемуся изображению намного более гладкий взгляд. Существует много методов для передискретизации, как билинейный, bicubic, lanczos и т.д.
Смотрят на функция BicubicResample от wxWidgets. Это работает, будет все виды изображений, не только шкала полутонов, но и необходимо быть в состоянии адаптировать его к потребностям. Тогда там также передискретизирует код от VirtualDub. Google Codesearch может показать более связанный код.
РЕДАКТИРОВАНИЕ: связи выглядят хорошо в предварительном просмотре, но разорваны, когда отправлено. Это странно. Перейдите к Google codesearch и запросу для "wxwidgets resamplebicubic", и "virtualdub передискретизируют" соответственно для получения тех же результатов.
То, что Вы делаете, отображает ряд точек ввода на ряд выходных точек. Первая часть проблемы должна определить отображение для Вашего изменения размеров или вращения; вторая часть должна обработать точки, которые не лежат точно на границе пикселей.
Отображение для изменения размеры легко:
x' = x * (width' / width)
y' = y * (height' / height)
Отображение для вращения только немного более трудно.
x' = x * cos(a) + y * sin(a)
y' = y * cos(a) - x * sin(a)
техника для определения значения пикселей, которые перестают работать, сетку называют интерполяцией. Существует много таких алгоритмов, располагаясь широко в скорости и заключительном качестве изображения. Несколько из них в увеличивающемся порядке качества/времени являются самым близким соседом, билинейным, bicubic, и фильтр Sinc.
Существует много способов масштабировать и повернуть изображения. Самый простой способ масштабироваться:
dest[dx,dy] = src[dx*src_width/dest_width,dy*src_height/dest_height]
, но это производит массивные эффекты при увеличении размера и потери детали при сокращении размера. Существуют способы привести к лучше выглядящим результатам, например, билинейная фильтрация .
Для вращения, src пиксельное местоположение может быть вычислено с помощью матрица вращения :
sx,sy = M(dx,dy)
, где M является матрицей, которая отображает целевые пиксели на исходное изображение. Снова, необходимо будет сделать интерполяцию для приведения к немассивным результатам.
, Но существует много библиотек, доступных, если Вы не хотите входить в математику обработки изображений.
sed
только при помощи инфраструктуры команды вместо команды фарфора как git branch
. Посмотрите, например stackoverflow.com/questions/2978947/… или stackoverflow.com/questions/2976665/git-changelog-day-by-day/…
– VonC
9 April 2012 в 21:06
CxImage является свободной библиотекой для обработки изображений, которые могут сделать то, что Вы хотите. Я лично не использовал его за исключением тривиального материала, но я видел, что это неоднократно рекомендовало.
Вы хотите сделать грязную работу сами, или может ImageMagick делать это для Вас?
point scaling(point p,float sx,float sy) {
point s;
int c[1][3];
int a[1][3]={p.x,p.y,1};
int b[3][3]={sx,0,0,0,sy,0,0,0,1};
multmat(a,b,c);
s.x=c[0][0];
s.y=c[0][1];
return s;
}
Методы изменения размера CxImage дают странный результат. Я использовал функции Resample и Resample2 со всеми доступными вариантами методов интерполяции с тем же результатом. Например, попробуйте изменить размер изображения 1024 x 768, залитого белым цветом, до размера 802 x 582. Вы обнаружите, что на изображении есть пиксели, которые имеют цвет , отличный от белого! Вы можете проверить это: откройте изображение с измененным размером в Windows Paint и попробуйте залить его черным цветом. Результат наверняка вас развеселит.