Вы изменяете размеры больше, или меньший? Маленьким % или большим фактором как 2x, 3x? Что Вы подразумеваете под качеством для своего приложения? И какой изображения - фотографии, бескомпромиссные рисунки строки, или что? Запись собственного пиксельного кода шлифования низкого уровня или попытки сделать это как можно больше с существующими библиотеками (.net или безотносительно)?
по этой теме существует большая совокупность знаний. Ключевое понятие является интерполяцией.
рекомендации Просмотра:
* http://www.all-in-one.ee/~dersch/interpolator/interpolator.html
* http://www.cambridgeincolour.com/tutorials/image-interpolation.htm
* для C#: https://secure.codeproject.com/KB/GDI-plus/imageprocessing4.aspx? display=PrintAll&fid=3657&df=90&mpp=25&noise=3&sort=Position&view=Quick&fr=26&select=629945 * это является определенным для Java, но могло бы быть образовательным - http://today.java.net/pub/a/today/2007/04/03/perils-of-image-getscaledinstance.html
Сеанс Hibernate предоставляет метод doWork ()
, который дает вам прямой доступ к java.sql.Connection
. Затем вы можете создать и использовать java.sql.CallableStatement
для выполнения вашей функции:
session.doWork(new Work() {
public void execute(Connection connection) throws SQLException {
CallableStatement call = connection.prepareCall("{ ? = call MYSCHEMA.MYFUNC(?,?) }");
call.registerOutParameter( 1, Types.INTEGER ); // or whatever it is
call.setLong(2, id);
call.setLong(3, transId);
call.execute();
int result = call.getInt(1); // propagate this back to enclosing class
}
});
public static void getThroHibConnTest() throws Exception {
logger.debug("UsersActiion.getThroHibConnTest() | BEG ");
Transaction tx = null;
Connection conn = null;
CallableStatement cs = null;
Session session = HibernateUtil.getInstance().getCurrentSession();
try {
tx = session.beginTransaction();
conn = session.connection();
System.out.println("Connection = "+conn);
if (cs == null)
{
cs =
conn.prepareCall("{ ?=call P_TEST.FN_GETSUM(?,?) }");
}
cs.clearParameters();
cs.registerOutParameter(1,OracleTypes.INTEGER);
cs.setInt(2,1);
cs.setInt(3,2);
cs.execute();
int retInt=cs.getInt(1);
tx.commit();
}catch (Exception ex) {
logger.error("UsersActiion.getThroHibConnTest() | ERROR | " , ex);
if (tx != null && tx.isActive()) {
try {
// Second try catch as the rollback could fail as well
tx.rollback();
} catch (HibernateException e1) {
logger.debug("Error rolling back transaction");
}
// throw again the first exception
throw ex;
}
}finally{
try {
if (cs != null) {
cs.close();
cs = null;
}
if(conn!=null)conn.close();
} catch (Exception ex){;}
}
logger.debug("UsersActiion.getThroHibConnTest() | END ");
}
Да, вам нужно использовать выходной параметр. Если вы используете метод doWork (), вы должны сделать что-то вроде этого:
session.doWork(new Work() {
public void execute(Connection conn) {
CallableStatement stmt = conn.prepareCall("? = call <some function name>(?)");
stmt.registerOutParameter(1, OracleTypes.INTEGER);
stmt.setInt(2, <some value>);
stmt.execute();
Integer outputValue = stmt.getInt(1);
// And then you'd do something with this outputValue
}
});