summaryrefslogtreecommitdiff
path: root/html
diff options
context:
space:
mode:
Diffstat (limited to 'html')
-rw-r--r--html/en/history.html7
-rw-r--r--html/examples/combine4-10x15.lua145
2 files changed, 152 insertions, 0 deletions
diff --git a/html/en/history.html b/html/en/history.html
index 1f4c4a1..8ef2253 100644
--- a/html/en/history.html
+++ b/html/en/history.html
@@ -12,6 +12,13 @@
<h2>History of Changes</h2>
<h3 dir="ltr">
+ CVS (16/Feb/2010)</h3>
+<ul dir="ltr">
+ <li dir="ltr"><span style="color: #008000"><span style="color: #ff0000">Fixed:</span><span
+ style="color: #000000"> invalid memory access in <strong>
+ imProcessResize</strong> when one dimension is equal to the original.</span></span></li>
+</ul>
+<h3 dir="ltr">
<a href="http://sourceforge.net/projects/imtoolkit/files/3.6/">Version 3.6</a> (26/Jan/2010)</h3>
<ul dir="ltr">
<li><span style="color: #0000FF">New:</span> function <strong>
diff --git a/html/examples/combine4-10x15.lua b/html/examples/combine4-10x15.lua
new file mode 100644
index 0000000..6460bce
--- /dev/null
+++ b/html/examples/combine4-10x15.lua
@@ -0,0 +1,145 @@
+--A script to compose 4 images
+
+require"imlua"
+require"imlua_process"
+require"iuplua"
+
+
+function CombineImages(comb_image)
+ local w = comb_image:Width()-offset
+ local h = comb_image:Height()-offset
+ local half_w = math.floor(w/2)
+ local half_h = math.floor(h/2)
+ local x = {0, 0, half_w+offset, half_w+offset}
+ local y = {0, half_h+offset, 0, half_h+offset}
+
+ for i = 1, 4 do
+ local img_w = images[i]:Width()
+ local img_h = images[i]:Height()
+
+ if (img_w ~= half_w or img_h ~= half_h) then
+ local rz_w, rz_h, img_aspect
+
+ img_aspect = img_w/img_h
+
+ -- keep image aspect ratio
+ if (img_aspect ~= aspect) then
+ if (img_aspect < aspect) then
+ rz_h = half_h
+ rz_w = math.floor(rz_h * img_aspect)
+ else
+ rz_w = half_w
+ rz_h = math.floor(rz_w / img_aspect)
+ end
+ else
+ rz_w = half_w
+ rz_h = half_h
+ end
+
+ if (img_w ~= rz_w or img_h ~= rz_h) then
+ resize_image = im.ImageCreate(rz_w, rz_h, im.RGB, im.BYTE)
+ im.ProcessResize(images[i], resize_image, 1) -- do bilinear interpolation
+ images[i]:Destroy()
+ images[i] = resize_image
+ end
+ end
+
+ im.ProcessInsert(comb_image, images[i], comb_image, x[i], y[i]) -- insert resize in dst and place the result in dst
+ end
+end
+
+function Save_Combine_Image(comb_image)
+ local i=0
+ local filename
+ repeat
+ i=i+1
+ local num=1000+i
+ numstr=string.sub(tostring(num),-3)
+ filename = "..\\combine"..numstr..".jpg"
+ -- check if exists
+ local res,msg=io.open(filename)
+ io.close()
+ until not res
+ print("Saving:", filename)
+ comb_image:Save(filename, "JPEG")
+ os.execute(filename)
+end
+
+function LoadImages()
+ local max_w, max_h = 0, 0
+ for i = 1, 4 do
+ if (not files[i]) then
+ error("Error, must drop 4 files.")
+ end
+ print("Loading:", files[i])
+ images[i] = im.FileImageLoadBitmap(files[i])
+ if (not images[i]) then
+ error("Failed to load image: "..files[i])
+ end
+ local img_w = images[i]:Width()
+ local img_h = images[i]:Height()
+ if (img_w < img_h) then
+ -- always landscape (w>h)
+ local rot_image = im.ImageCreate(img_h, img_w, im.RGB, im.BYTE)
+ im.ProcessRotate90(images[i], rot_image, true)
+ images[i]:Destroy()
+ images[i] = rot_image
+ local t = img_w
+ img_w = img_h
+ img_h = t
+ end
+ if (max_w < img_w) then max_w = img_w end
+ if (max_h < img_h) then max_h = img_h end
+ end
+ return max_w, max_h
+end
+
+function ReleaseAll(comb_image)
+ comb_image:Destroy()
+ for i = 1, 4 do
+ images[i]:Destroy()
+ images[i] = nil
+ files[i] = nil
+ end
+end
+
+--Script Starts
+
+files = {}
+images = {}
+aspect = 15/10
+offset = 20
+
+dlg = iup.dialog{
+ iup.label{title="Drop here 4 photos."},
+ title="Combine",
+ size="150x50"}
+
+function dlg:dropfiles_cb(filename, num)
+ files[num+1] = filename
+ if (num == 0) then
+ local max_w, max_h = LoadImages()
+ local w, h = 2*max_w+offset, 2*max_h+offset
+
+ if (w/h ~= aspect) then
+ if (w/h < aspect) then
+ w = h * aspect
+ else
+ h = w / aspect
+ end
+ end
+
+ print("Combining...")
+ local comb_image = im.ImageCreate(w, h, im.RGB, im.BYTE)
+ -- white background
+ im.ProcessRenderConstant(comb_image, {255, 255, 255})
+ CombineImages(comb_image)
+
+ Save_Combine_Image(comb_image)
+
+ ReleaseAll(comb_image)
+ end
+end
+
+dlg:show()
+iup.MainLoop()