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

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

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

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

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

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

现在假设有100张BMP图片,这些图片宽高互相之间都彼此相同,当然每张的宽和高都不一样。! W. d: e4 N0 \( h1 r+ P6 x
图片的背景都不同,但是上面都用一种颜色写着一个汉字,比如是黄色。6 W% L6 A% f& b2 z9 T1 v
要求抽出一些像素,这些像素满足以下条件
  b- \5 n2 w, i
. a. t( B0 B% Z) m( j# T1 P# v1. 颜色都相同是黄色
$ ~2 X1 y# h' {9 ^0 f& d5 J! ?2.在图片中的位置x,y都相同
- t5 g5 o7 n! d( N# ^3.这些点在每张图片中都出现
* @) n# z! @+ |$ Y% A/ Q+ ]3 c3 Y( c9 \& o( }$ U  q0 a
要求程序能对应24bit  bmp 和32bit bmp* [! F* f9 j8 W5 o$ p7 X5 D" j' W

* C! Z, M- d+ K9 L* w' ^把所有满足条件的点的x,y都输出到一个文本文件就行。& V  g" n( B9 ~- q5 V- C1 Z, c; T
这个程序主要是用来做图像识别的预处理。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

17#
 楼主| 发表于 2009-6-4 22:59 | 只看该作者
引用第15楼firendless于2009-06-04 22:56发表的  :# y" ?% ~" [3 x/ `, ^8 G
我明白了...
5 t3 m2 ?' O5 H; v) _& l- C不过屏幕中央是个什么概念,1024x768的标准的话, (512,384)还是?

" n0 T7 H: {) _6 G4 b不是指屏幕的正中央,是指屏幕中部。) e3 x& {& {4 R3 V, _1 `% z
你看过游戏画面就知道。
回复 支持 反对

使用道具 举报

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

使用道具 举报

15#
 楼主| 发表于 2009-6-4 22:47 | 只看该作者
1、首先修改字体,让我们需要显示的文字等宽等高。 / s& r$ V' r% H, ^
理解正确 9 I; r' v5 |  q4 `" }2 j/ y: c7 N4 Q  S3 Y* N

* y7 q* A8 _3 L+ S% Q2 ^2、然后修改要显示的文本,产生类似条码的东西。比如聪允镜腛ption,我们可能需要改成■ ■■■ ■ - X4 r( P- h4 X
基本理解正确。
" s# t" h# S4 B0 y. a" D条形码只用于识别屏幕下方黑色背景的字幕。
) ^# v+ H/ {* S0 Y: s注意图片字库有多个,就是说有多个tga.
2 W+ F9 e5 K. Z4 H( q3 f
  t4 P' P) B7 `由于图片字库可以自己定义每个字符的宽高,我想定义2个宽高都是1个像素的字符。
7 c$ N) q8 U2 L+ O& H/ ~. i一个是有色点,一个是透明点。显示出来就是一个像素级的条形码。这个能理解吧。 2 [0 e3 e0 B- V

+ v6 V) n: E9 f3、修改文字显示的位置,尽量让每个场景的文字都显示在同一个地方。
3 T3 W: h" e* f) `. l1 {7 [理解正确 . x* ?0 [; J& W; `' D

  R/ q- O; u- [9 Q! g
1 @% f' d3 g! W4、另外运行一个程序,动态监测屏幕,发现类似条码的部分就去比照对码表,符合的就用DirectDraw技术将字幕覆盖原画面。
8 W- M  M& b1 b: f4 y; Q理解正确
5 |$ |2 t4 r% t  N6 X7 R这个游戏用的是dx9,不是DirectDraw。
6 K: l2 v. k7 V+ P4 ~( W2 g3 e
dx9 proxy dll技术你可以再看看我发的帖子。
! u# E- t$ v5 P. M1 ^; q  T7 V+ X: L3 w
基于我上述的理解,我有几点不明白的地方: " m5 [5 S4 p5 I8 @
1、方块的显示用什么字符呢?
4 ?5 ~' Z) H- {0 \这个上面解释了 % m+ h3 i. t$ y/ s* o2 }+ f8 I- [

6 G9 i& Q4 P" x2、如果单纯是方块和空格的变化,那跟二进制差不多,需要的位数就会很长才能满足需要; 7 J% a# H4 h* z* x2 K
不错,要12-13 位,不过是像素级的,实际上很短。 5 M2 n- k5 r7 L/ V# {
就算比较长,我的字幕写上去之前,会先画个黑色矩形上去覆盖掉。
% [* S; K! z. u8 U) S所以不会有问题。
% F, z4 I* i3 Y3 B; \4 k. N3 o
! h; E& u# d5 z3、关于像素级二维码,我没看明白。怎么生成? 5 b) K4 N  k% V  O
上面的都理解的话这个也不难。
7 H/ @8 M6 k. O5 _6 i8 _  H道理和条形码类似,不过二维码和条形码用的不是同一个tga。
/ h4 B% c4 r+ l2 Y) [3 U二维码对应屏幕中央字幕。
' Y& R: ?4 {4 W" o条形码对应屏幕底部字幕。
0 b/ Z2 d0 E% _7 Y
, g1 m+ c: K' |二维码是一个3x3 像素级的小块,这样面积最小,要知道,在屏幕中央字幕显示的时候。
& J$ r7 j8 M" M& N6 z! J; N6 M由于有游戏背景,所以不能先画一个黑色矩形上去,所以要求二维码的面积足够小。 ! R. @1 B* r$ H$ k6 ]

  _  Z' C0 \1 U& x二维码 是一个ID 对应一个ASCII 码,再对应1个3x3 像素级的小块 4 W' P/ |4 D2 q- _* T0 X
条形码 是一个ID 对应 12-13 个ASCII 码  再对应 12-13 个1x1 像素级的小块
) g, ]" Z& I6 R2 p+ G" o: J* O* o% P5 m& n7 a5 h
明白了吗?
回复 支持 反对

使用道具 举报

14#
 楼主| 发表于 2009-6-4 22:28 | 只看该作者
引用第9楼sspking于2009-06-04 22:06发表的  :
, g# c) A: p1 i) b. t6 u这个事情不难,我给你写个小程式~' I; q9 P, Z0 D' y" I0 j$ i
就是取一个图片,把图片中所有的指定颜色的XY坐标集输出到TXT中对吧?

" \0 d$ [3 E) ?$ c) }6 h这个任务暂时取消了,本次ankh汉化暂时用不上这个。
回复 支持 反对

使用道具 举报

13#
 楼主| 发表于 2009-6-4 22:26 | 只看该作者
肥牛,你真聪明!
( n. ~8 u3 V, e" G$ [你看懂了大约80%。
& i  d2 ^8 S( p, G) h, n$ }还有20%等我慢慢告诉你。
回复 支持 反对

使用道具 举报

12#
发表于 2009-6-4 22:21 | 只看该作者
我刚才又看了一遍你的帖子,现在我的理解是这样的,你看看对不对。: P5 c) B  V7 j, k9 {* w
1、首先修改字体,让我们需要显示的文字等宽等高。/ r% ^- R8 D1 w+ A/ N. R
2、然后修改要显示的文本,产生类似条码的东西。比如原来显示的Option,我们可能需要改成■ ■■■ ■
( X" q0 F) Z: w; n( M  A( ^( Y3、修改文字显示的位置,尽量让每个场景的文字都显示在同一个地方。
# {  h1 L  G/ }( X8 i/ T4、另外运行一个程序,动态监测屏幕,发现类似条码的部分就去比照对码表,符合的就用DirectDraw技术将字幕覆盖原画面。
7 f1 I5 K* Z" @2 r7 ^( e( p- W! t) N" ~0 z, e; T! N
基于我上述的理解,我有几点不明白的地方:* ]+ c; O3 P; x4 [  Q8 z/ N$ r9 {
1、方块的显示用什么字符呢?2 b# [# [+ V$ H5 w% a
2、如果单纯是方块和空格的变化,那跟二进制差不多,需要的位数就会很长才能满足需要;
4 S4 a$ w7 `- F' r% T* `" A3、关于像素级二维码,我没看明白。怎么生成?
回复 支持 反对

使用道具 举报

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 | 只看该作者
这个事情不难,我给你写个小程式~
; F3 o; z3 Q8 p& l2 `5 L2 O就是取一个图片,把图片中所有的指定颜色的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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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