设为首页收藏本站官方微博

【汉化任务简报】#27 图片交集像素抽出程序

[复制链接]
查看: 2857|回复: 16
打印 上一主题 下一主题

【汉化任务简报】#27 图片交集像素抽出程序

跳转到指定楼层
楼主
发表于 2009-6-2 11:54 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

【汉化任务简报】#27 图片交集像素抽出程序

现在假设有100张BMP图片,这些图片宽高互相之间都彼此相同,当然每张的宽和高都不一样。1 v/ U/ k. g" R. X# D+ y
图片的背景都不同,但是上面都用一种颜色写着一个汉字,比如是黄色。
0 [) A  u, C8 ]+ B3 q3 y/ X要求抽出一些像素,这些像素满足以下条件
+ ~0 }/ A3 d5 y3 J  L# R( M# E( d$ x; J% i5 c! Y2 X7 k( r% @
1. 颜色都相同是黄色: Q& i) D# k- l4 q& J* ]0 V
2.在图片中的位置x,y都相同
6 K/ m0 b: U+ `3.这些点在每张图片中都出现% X# Y# {# }4 D5 e% D. t4 a* E
0 x7 ?, O  p+ n& p9 k$ F- w; I
要求程序能对应24bit  bmp 和32bit bmp+ h! |1 Y) s& t  \
. M. b. Q/ S) d
把所有满足条件的点的x,y都输出到一个文本文件就行。
) d3 x0 |) b$ ^6 I这个程序主要是用来做图像识别的预处理。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

17#
 楼主| 发表于 2009-6-4 22:59 | 只看该作者
引用第15楼firendless于2009-06-04 22:56发表的  :+ U9 B" I* J/ h' k% E) h2 i
我明白了...
7 D) {' q/ ?* l, i  L2 A- O不过屏幕中央是个什么概念,1024x768的标准的话, (512,384)还是?

0 ~5 b4 p: d  e. ^不是指屏幕的正中央,是指屏幕中部。
8 t# K8 q* H! c" Y1 m你看过游戏画面就知道。
回复 支持 反对

使用道具 举报

16#
发表于 2009-6-4 22:56 | 只看该作者
我明白了...; U9 V( O9 d) D! E7 I
不过屏幕中央是个什么概念,1024x768的标准的话, (512,384)还是?
回复 支持 反对

使用道具 举报

15#
 楼主| 发表于 2009-6-4 22:47 | 只看该作者
1、首先修改字体,让我们需要显示的文字等宽等高。 & t  G' t  Z2 O7 x& f
理解正确
2 s3 p3 d5 q. b1 ~3 p1 ?# b2 R5 o* D9 r
2、然后修改要显示的文本,产生类似条码的东西。比如聪允镜腛ption,我们可能需要改成■ ■■■ ■
; e, x/ c% @; D& T# T7 x6 `基本理解正确。
* l8 w* X8 N, K9 C5 b2 Z1 x条形码只用于识别屏幕下方黑色背景的字幕。
9 T8 _( p5 w4 I6 Q  b注意图片字库有多个,就是说有多个tga. - u% M) _* x& y1 q2 ^* p3 b( [

- X0 L8 B( Q* c4 K  G3 ^由于图片字库可以自己定义每个字符的宽高,我想定义2个宽高都是1个像素的字符。 . X8 w1 M3 T" L2 m' k$ d: z# M/ Z: p
一个是有色点,一个是透明点。显示出来就是一个像素级的条形码。这个能理解吧。 # c, Q5 A/ H, T$ `1 p8 ~- o5 ^: o
, d; |5 e7 `0 n% R: ?) L- M- y# V
3、修改文字显示的位置,尽量让每个场景的文字都显示在同一个地方。
5 {( i. J% W% ^  H1 o* {5 r理解正确
3 l) ?/ F6 ^3 U2 u+ }  b! \8 y& ^
: k+ Y9 _2 h, |, U4 P2 h. w
! `* c4 D  h) E( m- k
4、另外运行一个程序,动态监测屏幕,发现类似条码的部分就去比照对码表,符合的就用DirectDraw技术将字幕覆盖原画面。
7 j, }% w2 r2 [) I4 P理解正确 % |- V+ X0 G$ t2 A; W
这个游戏用的是dx9,不是DirectDraw。
9 H9 g+ _; E, }
dx9 proxy dll技术你可以再看看我发的帖子。
6 G; S0 ^; g7 g5 C
* i' a! Z3 p+ x& y+ y. T+ c基于我上述的理解,我有几点不明白的地方:
2 d9 [" ]- R' C3 K0 W. r1、方块的显示用什么字符呢?
. p8 p8 D# B  U, {这个上面解释了
2 t  Y7 D/ o, z3 g( v/ x; j: u2 i% r8 G: j+ N
2、如果单纯是方块和空格的变化,那跟二进制差不多,需要的位数就会很长才能满足需要; 7 j/ z# `. v/ a7 r+ o8 X
不错,要12-13 位,不过是像素级的,实际上很短。
. V/ s" A# z) T就算比较长,我的字幕写上去之前,会先画个黑色矩形上去覆盖掉。 : d0 }0 T, D: q& L0 H& E
所以不会有问题。 # x  Y: h+ b; R5 q1 n

# t/ y. b% q) a6 I' B$ M3、关于像素级二维码,我没看明白。怎么生成? " @. Z" M. O0 @) S- d' U! g
上面的都理解的话这个也不难。 , l( ^0 a: x& N! F; q% N9 ^
道理和条形码类似,不过二维码和条形码用的不是同一个tga。 ; L9 K& R8 Z  g5 A9 i+ b) E
二维码对应屏幕中央字幕。 5 q8 z5 S6 z) X8 b: A
条形码对应屏幕底部字幕。 # `& `! A- r& A
) @% J" @# v4 N
二维码是一个3x3 像素级的小块,这样面积最小,要知道,在屏幕中央字幕显示的时候。
2 s7 v2 v9 q& n) }8 l0 E4 V, \* W由于有游戏背景,所以不能先画一个黑色矩形上去,所以要求二维码的面积足够小。 0 X' m) H( a$ Y
0 H0 |) U) u3 U0 X3 `
二维码 是一个ID 对应一个ASCII 码,再对应1个3x3 像素级的小块
- e5 \9 O. G. L) F% N0 r条形码 是一个ID 对应 12-13 个ASCII 码  再对应 12-13 个1x1 像素级的小块 ! q. |/ n0 i1 s& \5 d1 s. m+ u4 b; d. N

- L8 P) U/ i8 Q; ^) X明白了吗?
回复 支持 反对

使用道具 举报

14#
 楼主| 发表于 2009-6-4 22:28 | 只看该作者
引用第9楼sspking于2009-06-04 22:06发表的  :
$ G- j8 F4 E2 ~8 p这个事情不难,我给你写个小程式~
- E, V3 }) E' h. H5 d6 X2 i就是取一个图片,把图片中所有的指定颜色的XY坐标集输出到TXT中对吧?

+ ]( z0 R6 L" D* q/ x  v这个任务暂时取消了,本次ankh汉化暂时用不上这个。
回复 支持 反对

使用道具 举报

13#
 楼主| 发表于 2009-6-4 22:26 | 只看该作者
肥牛,你真聪明!
1 e9 O! C. ?, z! D% x5 E6 [9 \你看懂了大约80%。
5 K* A3 I0 T9 W8 g6 i还有20%等我慢慢告诉你。
回复 支持 反对

使用道具 举报

12#
发表于 2009-6-4 22:21 | 只看该作者
我刚才又看了一遍你的帖子,现在我的理解是这样的,你看看对不对。
0 Q/ L1 L7 x/ q* I1、首先修改字体,让我们需要显示的文字等宽等高。
6 H# o) ]' U( T! h1 U, `2、然后修改要显示的文本,产生类似条码的东西。比如原来显示的Option,我们可能需要改成■ ■■■ ■# N( r0 G  H/ X% |: O/ h, K
3、修改文字显示的位置,尽量让每个场景的文字都显示在同一个地方。, g* c! a9 L( ]2 D; w- c& w
4、另外运行一个程序,动态监测屏幕,发现类似条码的部分就去比照对码表,符合的就用DirectDraw技术将字幕覆盖原画面。0 O7 {2 k8 ~  h2 x; u# i: \

9 c6 I. n8 X# p, Y) \4 \; r8 j基于我上述的理解,我有几点不明白的地方:
* ~$ ?  V. C$ q7 J+ Q1、方块的显示用什么字符呢?% V& f2 C/ }7 D* z0 s3 l
2、如果单纯是方块和空格的变化,那跟二进制差不多,需要的位数就会很长才能满足需要;
7 l8 ~: |, G; L3、关于像素级二维码,我没看明白。怎么生成?
回复 支持 反对

使用道具 举报

11#
发表于 2009-6-4 22:09 | 只看该作者
这个帖子回复的人不少么,我放一个C code
  1. public   void   DrawXORRectangle(   Graphics   grp,
  2.                                                             int   X1,   int   Y1,   int   X2,   int   Y2   )
  3. {
  4. //   Extract   the   Win32   HDC   from   the   Graphics   object   supplied.
  5. IntPtr   hdc   =   grp.GetHdc();
  6. //   Create   a   pen   with   a   dotted   style   to   draw   the   border   of   the
  7. //   rectangle.
  8. IntPtr   gdiPen   =   CreatePen(   penStyle,
  9.                             1,   BLACK_PEN   );
  10. //   Set   the   ROP   cdrawint   mode   to   XOR.
  11. SetROP2(   hdc,   R2_XORPEN   );
  12. //   Select   the   pen   into   the   device   context.
  13. IntPtr   oldPen   =   SelectObject(   hdc,   gdiPen   );
  14. //   Create   a   stock   NULL_BRUSH   brush   and   select   it   into   the   device
  15. //   context   so   that   the   rectangle   isn 't   filled.
  16. IntPtr   oldBrush   =   SelectObject(   hdc,
  17.                                           GetStockObject(   NULL_BRUSH   )   );
  18. //   Now   XOR   the   hollow   rectangle   on   the   Graphics   object   with
  19. //   a   dotted   outline.
  20. Rectangle(   hdc,   X1,   Y1,   X2,   Y2   );
  21. //   Put   the   old   stuff   back   where   it   was.
  22. SelectObject(   hdc,   oldBrush   );   //   no   need   to   delete   a   stock   object
  23. SelectObject(   hdc,   oldPen   );
  24. DeleteObject(   gdiPen   ); //   but   we   do   need   to   delete   the   pen
  25. //   Return   the   device   context   to   Windows.
  26. grp.ReleaseHdc(   hdc   );
  27. }
复制代码
回复 支持 反对

使用道具 举报

sspking 该用户已被删除
10#
发表于 2009-6-4 22:06 | 只看该作者
这个事情不难,我给你写个小程式~# P3 I( f# c9 w8 j! a& X" E4 z% g
就是取一个图片,把图片中所有的指定颜色的XY坐标集输出到TXT中对吧?
回复 支持 反对

使用道具 举报

9#
 楼主| 发表于 2009-6-4 22:05 | 只看该作者
放着,以后可能会有用。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

冒险解谜游戏中文网 ChinaAVG

官方微博官方微信号小黑屋 微信玩家群  

(C) ChinaAVG 2004 - 2019 All Right Reserved. Powered by Discuz! X3.2
辽ICP备11008827号 | 桂公网安备 45010702000051号

冒险,与你同在。 冒险解谜游戏中文网ChinaAVG诞生于2004年9月9日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

快速回复 返回顶部 返回列表